Приложение Zend Framework/Doctrine 2.:
/app
/modules
/blog
/controllers
/BlogController.php
/domain
/entities
/services
/PostService.php
/repositories
PostService отвечает за базовые операции CRUD, работая непосредственно с сущностями и EntityManager, чтобы абстрагировать бизнес-логику и логику постоянства от моих контроллеров.
Если возможно, я хотел бы сохранить свои услуги в качестве POPO. Как лучше всего получить доступ/внедрить EntityManager в мой класс обслуживания? Я новичок в DI, поэтому этот вопрос. EntityManager доступен как загрузочный ресурс в моих контроллерах.
Должен ли я просто написать абстрактный класс для служб для доступа к EntityManager? Должен ли я написать класс для создания экземпляров моих служб, внедряя EntityManager через конструктор/сеттер?... который будет включать интерфейс для моих служб. Должен ли я использовать структуру DI? Если да, то какой и как?
Или есть другой, лучший способ сделать это?
Я читал об инъекциях зависимостей, но до сих пор не полностью понял это в этом контексте.
Обновление (12 января 2011 г.)
Итак, это мое текущее рабочее решение: у меня есть помощник действия под названием Resource, это помощник для извлечения ресурсов из начальной загрузки, или вы можете добавить к нему ресурсы вручную: http://pastie.org/1450851
$this->_helper->Resource('em'); // get EntityManager
Может ли кто-нибудь дать некоторое представление о влиянии на производительность локального хранения ресурсов начальной загрузки в вспомогательном классе? Я слишком много делаю?
ЗАДАЧА: Рефакторинг resourcesMap вне класса.
И у меня есть помощник по загрузке служб: http://pastie.org/1450855
TODO: Добавить проверяет перед попыткой загрузить службу.
Покритикуйте вышеизложенное :)