Шаблон Data Mapper обработка большого количества данных

Изучаю шаблон Data Mapper, и основной вопрос: как коллекции справляются с обработкой большого количества объектов (преобразованных записей из таблицы - в моем случае это около 2-3 тысяч).

Подробнее, что я делал. Читаю "Мэтт Зандстра. Объекты, шаблоны и методики программирования.". Он пишет, что "...если в итоге возвращается множество из 1000 объектов, его обработка окажется чрезмерно затратной...". В качестве способа решения используется коллекция, реализующая интерфейс Iterator. Насколько я понял, идея в том, чтобы в коллекции хранился массив строк, и только по необходимости, при запросе клиента, эта строка преобразовывалась в объект. Отрывок класса Collection:

abstract class Collection implements \Iterator ...
// ...
protected $raw = array(); // массив данных
private $objects = array(); // массив объектов - пустой при создании
// ...
public function getRow($num){
    if(array_key_exists($num, $this->objects)){
        return $this->objects[$num];
    }
    
    if(array_key_exists($num, $this->raw)){
        $obj = $this->mapper->createObject($this->raw[$num]);
        $this->objects[$num] = $obj;
        return $this->objects[$num];
    }
    //...
}
//...

Теперь, где-то в представлении, я могу использовать эту коллекцию как массив. Например, конкретная задача - вывести прайс картриджей, их около 2000, и все надо показать на одной странице. Получается, что я получаю коллекцию CartridgesCollection и в цикле вывожу ее:

<?php foreach($CartridgesCollection as $cartridge){ ?>
    <div><?= $cartridge->getName() ?></div>
    // do something else
<?php } ?>

Вроде все понятно, но как решается проблема "затратности обработки"? Ведь пока я массив вывожу, я так же создаю свои 2000 объектов. Насколько я понимаю: так как в $CartridgesCollection изначально не куча объектов, это и дает необходимую оптимизацию?


Ответы (0 шт):