Шаблон Lazy Load

Lazy Load— это один из основных шаблонов, которые большинство веб-программистов изучают сами очень быстро. Причина проста— это важнейший механизм, позволяющий избегать массовых обращений к базе данных, т.е. то, к чему мы все стремимся.

Проблема шаблона Lazy Load

В примере, который рассматривается, мы установили связь между объектами Venue, Space и Event. Когда создается объект Venue, он автоматически получает объект SpaceCollection. Если бы нам нужно было перечислить все объекты Space в Venue, это автоматически сделало бы запрос к базе данных, чтобы получить все объекты Event, связанные с каждым объектом Space. Они сохраняются в объекте Event Collection. Если мы не хотим просматривать события, тем не менее, нам придется совершить несколько обращений к базе данных без всякой причины. И если у вас много объектов Venue, у каждого из которых два-три объекта Space, причем каждый объект Space управляет десятками и даже сотнями объектов Event, то получается слишком накладно.

Очевидно, в некоторых случаях нам нужно прерывать это автоматическое включение коллекций.

Вот код в SpaceMapper, который получает данные Event.

protected function doCreateObject( array $array ) {

$obj = new woo_domain_Space( $array['id'] );

$obj->setname( $array['name'] ) ;

$ven mapper = new woo_mapper_VenueMapper();

$venue = $ven_mapper->find( $array['venue'] );

$obj->setVenue( $venue );

$event_mapper = new woo_mapper_EventMapper();

$event_collection = $event_mapper->findBySpaceId( $array['id'] );

$obj->setEvents( $event_collection );

return $obj;
Метод doCreateObject () сначала получает объект Venue, с которым связан объект Space. Это не сложно, потому что данный объект почти наверняка уже сохранен в объекте ObjectWatcher. Затем этот метод вызывает метод EventMapрег : : findBySpaceId ( ). Вот здесь у системы могут возникнуть проблемы.

Советую прочитать также

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*

Перед отправкой формы: