Ответ 1
Я попытаюсь сломать менеджеров и сервисы в ZF2 для вас.
Менеджеры
К сожалению, слово "менеджер" применительно к классам невероятно неоднозначно, и в ZF2 существует некоторая несогласованность с тем, как это слово используется. Таким образом, действительно нет авторитетного определения того, что "менеджер" находится в ZF2. В настоящее время "Менеджеры" в ZF2 лучше всего разбивать следующим образом:
- ServiceManager - экземпляр
Zend\ServiceManager\ServiceManager
. Может быть несколько экземпляров ServiceManager - по умолчанию существует только "главный" диспетчер сервисов, который настроен с помощью ключа конфигурации "services" или массивом (ами), возвращаемым модулем getServiceConfig(). - Менеджеры плагинов. Они расширяют
Zend\ServiceManager\PluginManager
, который расширяетZend\ServiceManager\ServiceManager
с помощью некоторых специализированных функций. Они распространяются по многим компонентам в рамках и обеспечивают функциональность того, что было ранее известно (в более ранних версиях ZF2) в качестве Plugin Loaders/Brokers. Эти менеджеры плагинов инициализируют такие вещи, как просмотр помощников, плагины контроллера и . - Другие "Менеджеры" . Такие вещи, как
Zend\ModuleManager\ModuleManager
иZend\Session\SessionManager
. Они не имеют ничего общего с ServiceManager, но просто имеют "Менеджер" в качестве суффикса для их имени.
Я думаю, вы можете запутаться, пытаясь назначить определение термина (менеджер), который не был разработан с учетом какого-либо конкретного определения. Как автор Zend\ModuleManager
, я могу сказать вам, что я изначально разработал компонент как Zend\Module
(мне действительно не нравится Менеджер как суффикс). Было решено в одном из наших еженедельных собраний IRC, что Zend\Module
неоднозначно, и суффикс его с "Менеджером" каким-то образом разрешит эту двусмысленность. Очевидно, меня не голосовали по этому поводу. Моя точка зрения, Zend\ModuleManager
не была разработана для какой-либо спецификации "менеджера" по любому определению.
Услуги
В ZF2, в отношении Zend\ServiceManager
, "сервисы" - это просто объекты (а также технически могут быть массивами). Компонент ServiceManager можно рассматривать как простой реестр ключей для различных "сервисов" (объектов), которые могут потребоваться вашему приложению. Эти "службы" обычно такие, как настроенная почтовая программа, регистратор, адаптер базы данных, конфигурация приложения и т.д. Конечно, ServiceManager - это не просто простой реестр, а его основная функция - отсрочить создание служб (и их зависимостей) до тех пор, пока они действительно нужны; aka lazy loading); Я написал сообщение в котором подробно описаны различные функции ServiceManager.
Я случайно привык к созданию Менеджеров и предоставил factory ServiceManager, чтобы вы могли обращаться к Менеджеру с помощью $this- > getServiceLocator() → get ('managerName)
Я думаю, что в этом случае вы можете ввести в заблуждение термин "менеджер" с "сервисом" здесь. Вещи, зарегистрированные в ServiceManager, можно просто назвать "сервисами". Это может сбить с толку, потому что вы действительно можете зарегистрировать своего рода "менеджера" в качестве службы. Например, у вас может быть служба сеанса, которая имеет экземпляр Zend\Session\SessionManager
. Дальнейшая путаница возникает, поскольку термин "сервис" обычно относится к классу, который составляет часть уровня обслуживания .
Итак, к сожалению, да, терминология в ZF2 может быть немного туманной, но как только вы поймете пару относительно простых основных понятий, отличный дизайн действительно открывает удивительную гибкость, которая, на мой взгляд, не имеет аналогов большинству других существующих структур.
Надеюсь, что это поможет.