В настоящее время я работаю над простым приложением для составления бюджета в качестве личного проекта. Он построен на Zend Framework и использует архитектуру MVC и шаблон отображения данных. Контроллеры хранят и получают объекты модели домена через средства отображения данных и передают их в представление. Устройства отображения данных выполняют подготовленные операторы через адаптер Zend Db.
Модель домена состоит из пользователей, у которых много транзакций и много бюджетных категорий. Каждой транзакции можно присвоить категорию.
Архитектура работает достаточно хорошо для простых операций CRUD, но имеет несколько серьезных недостатков:
- Прежде всего, производительность. Объект User создается для каждого запроса, и средство отображения данных автоматически извлекает все категории бюджета для этого пользователя из базы данных. Они в свою очередь извлекают свои дочерние записи транзакций из базы данных. Это явно неэффективно.
- Во-вторых, в контроллерах много кода при работе с несколькими объектами модели или подмножеством объектов, такими как набор транзакций за определенный период времени. Я не уверен, где разместить этот код.
Ленивая загрузка кажется очевидным решением проблемы производительности. Но я не уверен, как реализовать это с помощью картографа данных и коллекций объектов. В частности, как должна работать отложенная загрузка, когда клиентский код запрашивает только подмножество коллекции?