Инструменты пользователя

Инструменты сайта


limb3_2007_2:ru:packages:orm:proxy

lmbProxy-классы, используемые в ORM

В целях уменьшения overhead-а при использовании ORM, в Limb начиная с версии alpha3 введены 2 lmbProxy класса, используемых именно в рамках подсистемы ORM:

  • lmbPersistentObjectProxy
  • lmbPersistentObjectProxyCollection

Оба этих класса наследуются от lmbProxy класса, который находится по пути LPKG_CORE_DIR/src/system/lmbProxy.class.php.

Примеры использования lmbProxy-объектов можно увидеть на странице про мапперы. Также мы рекомендуем прочитать описание lmbUnitOfWork о том, как транзакция работает с прокси-объектами.

lmbPersistentObjectProxy

lmbPersistentObjectProxy - прокси для единичного доменного объекта. Естественно, что этот класс реализует интерфейс lmbPersistable.

Мапперы при загрузке доменного объекта для тех атрибутов, которые являются другими доменными объектами, не загружают их, а создают прокси-объект класса lmbPersistentObjectProxy. В этот прокси передается идентификатор и название класса маппера, который может загрузить реальный объект в случае необходимости.

Главный вопрос, в каких случаях прокси-объект остается таким, а в каких случаях загружается реальный. Скажем сразу, что для клиентов процесс загрузки реального объекта остается прозрачным, то есть они не замечают, работают ли они с прокси-объектом или реальным. lmbPersistentObjectProxy заменяется реальным объектом во всех случаях когда происходит обращение к любым методам, кроме методом getHash() и getId(). Во всех остальных случаях происходит загрузка реального объкта. Однако этого достаточно для большинства случаев.

lmbPersistentObjectProxyCollection

lmbPersistentObjectProxyCollection - прокси на коллекцию доменных объектов. Данный класс реализует интерфейс lmbCollection. Позволяет не загружать список доменных объектов, связанных с каким-либо другим отношением 1..N или N..M, а делать это только при реальной необходимости. lmbPersistentObjectProxyCollection принимает в констукторе $dao, который позволит загрузить данные по реальным объектам, $mapper, которых из этих данных сможет сделать реальные объекты и пустой доменный объект (некий эталон), которыми будет наполнена реальная коллекция.

lmbPersistentObjectProxyCollection загружает реальные даннын при использовании любого метода из интерфейса итератора, а также при попытке добавления или удаления элементов из коллекции. lmbPersistentObjectProxyCollection возвращает пустой массив из метода getRemovedItems(), если прокси так и не был отрезолвлен. И еще, если прокси так и не был отрезолвлен, метод isChanged() будет возвращать false.

Обсуждение

Ваш комментарий. Вики-синтаксис разрешён:
 __  __ __  __ ______   __  ___  _____
 \ \/ / \ \/ //_  __/  /  |/  / / ___/
  \  /   \  /  / /    / /|_/ / / (_ / 
  /_/    /_/  /_/    /_/  /_/  \___/
 
limb3_2007_2/ru/packages/orm/proxy.txt · Последнее изменение: 2010/11/10 10:02 — 127.0.0.1