Попробую для вас разобрать менеджеры и сервисы в ZF2.
Менеджеры
К сожалению, слово «менеджер» по отношению к классам невероятно двусмысленно, и в ZF2 есть некоторое несоответствие тому, как это слово используется. Таким образом, действительно нет авторитетного определения того, что такое «менеджер» в ZF2. В настоящее время «менеджеров» в ZF2 лучше всего разделить следующим образом:
- ServiceManager — экземпляр
Zend\ServiceManager\ServiceManager
. Может быть несколько экземпляров ServiceManager — по умолчанию есть только «основной» диспетчер служб, который настраивается с помощью ключа конфигурации «services» или массива(ов), возвращаемого методом getServiceConfig() модуля.
- Менеджеры подключаемых модулей. Они расширяют
Zend\ServiceManager\PluginManager
, который расширяет Zend\ServiceManager\ServiceManager
некоторыми специализированными функциями. Они распределены по многим компонентам фреймворка и обеспечивают функциональность того, что ранее было известно (в более ранних версиях ZF2) как загрузчики/брокеры подключаемых модулей. Эти менеджеры плагинов инициализируют такие вещи, как помощники представлений, плагины контроллера и сами контроллеры.
- Другие «менеджеры» – например,
Zend\ModuleManager\ModuleManager
и Zend\Session\SessionManager
. Они не имеют ничего общего с ServiceManager, а просто имеют суффикс «Менеджер» к своему имени.
Я думаю, вы можете запутаться, пытаясь дать определение термину (менеджеру), который не был разработан с учетом какого-либо конкретного определения. Как автор Zend\ModuleManager
могу вам сказать, что я изначально разрабатывал компонент как Zend\Module
(мне очень не нравится суффикс Manager). На одной из наших еженедельных встреч IRC было решено, что Zend\Module
неоднозначно и что добавление к нему суффикса «менеджер» каким-то образом разрешит эту двусмысленность. Очевидно, я проиграл голосование по этому вопросу. Я хочу сказать, что Zend\ModuleManager
не был разработан для того, чтобы быть «менеджером», по любому определению.
Услуги
В ZF2, что касается Zend\ServiceManager
, «сервисы» — это просто объекты (технически они также могут быть массивами). Компонент ServiceManager можно рассматривать как простой реестр ключей и значений для различных «служб» (объектов), которые могут понадобиться вашему приложению. Эти «сервисы» обычно представляют собой такие вещи, как настроенная почтовая программа, регистратор, адаптер базы данных, конфигурация приложения и т. д. Конечно, ServiceManager — это не просто простой реестр, и его основная функция — отложить создание экземпляра сервисы (и их зависимости) до тех пор, пока они действительно не понадобятся; ленивая загрузка); Я написал сообщение в блоге, в котором подробно объясняются различные функции ServiceManager.
Я случайно привык создавать Менеджеры и предоставлять фабрику для ServiceManager, чтобы вы могли получить доступ к Менеджеру, используя $this->getServiceLocator()->get('managerName)
Я думаю, что в этом случае вы можете путать термин «менеджер» с «сервисом». Вещи, зарегистрированные в ServiceManager, можно просто называть «сервисами». Это может сбивать с толку, потому что вы действительно можете зарегистрировать какой-то «менеджер» в качестве службы. Например, у вас может быть служба «сеанс», которая является экземпляром Zend\Session\SessionManager
. Возникает дальнейшая путаница, поскольку термин "сервис" обычно относится к классу, который составляет часть уровня сервиса.
Так что, к сожалению, да, терминология в ZF2 может быть немного туманной, но как только вы поймете пару относительно простых основных концепций, отличный дизайн действительно откроет удивительную гибкость, которая, на мой взгляд, не имеет себе равных в большинстве других существующие фреймворки.
Надеюсь это поможет.
person
EvanDotPro
schedule
05.09.2012