2013-05-02 71 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),它將遍歷所有存儲的對象並應用你需要的任何功能。

相關問題