2013-05-02 26 views
1

我想知道创建对象列表的最佳方法。创建对象列表的正确方法

目前,我有一个类处理订单。为了检索订单,需要调用我们提供的API。 API调用非常昂贵,以至于我可以拨打电话返回5000个订单,而我可以为2个单独的订单拨打2个不同的电话。

因此,我建立了我的类以2种方式初始化,一种方式允许我传递一个订单号并初始化它本身,但是如果我将它传递给一个数组,它将使用数组中的数据创建目的。

现在我有像GetOrderList($startDate, $endDate)这样的函数可以调用API并填充一个完整的Order对象的数组,并返回所以我可以对它们做些什么。

对我来说,这感觉'哈克',所以我想知道是否有一个被接受的方式来做我想要做的事情,同时做更多的面向对象。

注:这是我使用的学习最佳实践,所以我宁愿听到我应该做的“VS“我可以在这里做”

+0

您正在使用PHP,该数组是最好也是唯一的方法。即使您在一天结束时创建了一个存储列表的对象,它也将使用数组来完成它。另外请记住,PHP中的对象本身只是数组的抽象。 – TCB13 2013-05-02 14:39:51

+0

如果您没有真正限制创建多少个对象,则可能会考虑以串行方式创建和处理订单对象,以保持较小的内存占用。这种策略很容易成为瓶颈,否则... – arkascha 2013-05-02 14:41:29

+0

所以这对你来说是'哈克'...请问你是什么意思?如果没有其他类型的组织结构或层次结构,为什么简单的列表不是适合容纳对象的容器?你能回答你自己的问题吗? – arkascha 2013-05-02 14:43:12

回答

1

这听起来对我来说很好。如果您希望“更正确”(您可以始终如此),那么您可能希望创建一个OrderManager对象,该对象具有用于管理Orders集合的类方法。示例呼叫可能如下所示:

<?php 
class OrderManager { 
    public static function getListByDateRange($startDate, $endDate) { 
     // ... 
     return $listOfOrders; 
    } 
} 

$orderList = OrderManager::getListByDateRange($startDate, $endDate); 
?> 

这叫做mediator pattern。它提供了扩展管理器类的灵活性,以便稍后进行其他形式的查询,或者如果您发现自己做了很多事情,则可以创建一个通用管理器类,并只指定它将在子类中使用哪些类型的对象。

+1

这正是我在找的!谢谢! – Klathmon 2013-05-02 14:51:08

0

一个个人项目有相当多2这样做的方法。你做这件事的方式就是这样,根据你所说的,你基本上是在创建一个对象数组(列表)。 OOP的方式是创建一个容器类(可能通过扩展ArrayObject或使用SplFixedArray)来保存所有的对象。然后你可以附加一个迭代器(可能是RecursiveArrayIterator),它将遍历所有存储的对象并应用你需要的任何功能。

相关问题