Подтвердить что ты не робот

Разница между классами Service и Manager в Zend Framework 2

Я немного запутался в суффиксе имени Manager и Service.

Насколько я понимаю разницу, Managers отвечают за обработку (создание, извлечение, удаление,...) определенных типов объектов. Например, ModuleManager отвечает за загрузку и возврат Modules. В этом случае вы заботитесь о фактической сущности, Module.

Однако Services являются классами, которые предоставляют интерфейсы для выполнения типов цетенов логики процесса. Например, a LogService отправляет данное сообщение журнала определенному журналиру. Вам все равно, куда оно идет и что он делает, вы просто хотите, чтобы администратор был проинформирован о том, что только что произошло.

Теперь ZF2 предоставляет ServiceManager, который создает и возвращает экземпляры заданного Service. Я случайно привык к созданию Managers и предоставлению factory для ServiceManager, чтобы вы могли получить доступ к Manager с помощью $this->getServiceLocator()->get('managerName'); в контексте Controller, чтобы держать контроллеры маленькими и реальную логику в проверяемые классы. Это та часть, которая меня путает прямо сейчас, потому что, очевидно, не может быть рекомендовано извлечь Managers с помощью ServiceLocator. НО: Я не единственный, кто это делает: модуль Doctrine ORM является еще одним примером для этого: он регистрирует EntityManager как doctrine.entitymanager.orm_default Service по умолчанию.

Я получаю истинную разницу между Services и Managers неправильно? Есть ли разница? Возможно ли Managers унаследовано от Services в концепции?

4b9b3361

Ответ 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 может быть немного туманной, но как только вы поймете пару относительно простых основных понятий, отличный дизайн действительно открывает удивительную гибкость, которая, на мой взгляд, не имеет аналогов большинству других существующих структур.

Надеюсь, что это поможет.