2013-05-02 3 views
1

Мне интересно, как лучше всего создать список объектов.Правильный способ создания списка объектов

В настоящее время у меня есть класс, который занимается заказами. Чтобы получить заказ, ему нужно позвонить в API, которому мы были предоставлены. Вызов API ОЧЕНЬ дорогой до такой степени, что я мог сделать вызов, который возвращает 5000 заказов быстрее, чем я мог сделать 2 отдельных вызова для двух отдельных заказов.

Из-за этого я построил свой класс для инициализации 2 способами, один способ позволяет мне передать номер заказа, и он инициализирует себя, но если я передам ему массив, он использует данные из массива для создания объект.

Теперь у меня есть функции, такие как GetOrderList($startDate, $endDate), которые делают один вызов API и заполняют массив, полный объектов Order, которые возвращаются, поэтому я могу делать с ними вещи.

Это чувствует себя «взломанным» для меня, поэтому мне было интересно, был ли принятый способ делать то, что я пытаюсь выполнить, будучи более ООП.

Примечание: это для личного проекта, который я использую, чтобы узнать лучшие практики, так что я предпочел бы услышать то, что я должен был сделать "против« что я могу сделать здесь»

+0

Вы используете PHP, массив - лучший и единственный способ. Даже если вы создадите объект для хранения списка в конце дня, он будет использовать массив для этого. Также помните, что сами объекты в PHP - это просто абстракция массивов. – TCB13

+0

Если у вас нет реального предела того, сколько объектов будет создано, вы можете рассмотреть возможность создания и обработки объектов заказа в последовательном порядке, чтобы сохранить небольшой объем памяти. Такие стратегии могут легко стать узким местом в противном случае ... – arkascha

+0

Так это чувствует себя «взломанным» для вас ... Могу ли я спросить, что вы имеете в виду? Почему простой список не является подходящим контейнером для хранения ваших объектов, если у вас нет другого типа организационной структуры или иерархии? Можете ли вы ответить на свой вопрос? – arkascha

ответ

1

Звучит прекрасно для меня в футляре. Если вы хотите быть «более правильным» (который вы можете ВСЕГДА быть), тогда вы можете захотеть создать объект OrderManager, который имеет метод класса для управления коллекциями заказов. Пример вызова может выглядеть следующим образом:

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

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

Это называется mediator pattern. Это дает гибкость в расширении класса менеджера, чтобы позже получить другие формы запросов, или если вы так много делаете, вы можете создать общий класс менеджера и просто указать, с какими типами объектов он будет работать в подклассе.

+1

Это именно то, что я искал! Спасибо! – Klathmon

0

Есть довольно много два способы сделать это. Там вы так делаете, что по звукам того, что вы сказали, вы в основном создаете массив (список) объектов. Путь OOP должен состоять в создании класса «контейнер» (возможно, путем расширения ArrayObject или с использованием SplFixedArray), который содержит все объекты. Затем вы можете прикрепить итератор (возможно, RecursiveArrayIterator), который будет прокручивать все ваши сохраненные объекты и применять любую необходимую функциональность.

Смежные вопросы