Управление зависимостями в приложениях Zend Framework 2 MVC
Поскольку ServiceLocatorAwareInterface, скорее всего, будетудален из абстрактного контроллера в ZF3вместо этого зависимости должны передаваться через конструктор или через методы установки.
Имея это в виду, рассмотрим вариант использования пользователя или контроллера сайта с такими действиями, как регистрация, активация учетной записи, вход в систему, выход из системы и т. Д. Как минимум, для этого потребуется UserService и 2 формы. Добавьте еще несколько связанных действий (удаленная аутентификация, связывание учетных записей и т. Д.), И вы получите 4 или 5 форм.
Передача всех этих зависимостей через конструктор будет в лучшем случае беспорядочной, и, что более важно, для каждого действия обычно требуется только 1 форма.
Какой из следующих методов вы считаете лучшим и почему?
Создайте отдельные контроллеры для каждого действия, чтобы каждому контроллеру требовалась только одна форма (в дополнение к услуге). Например, RegistrationController, LoginController, LinkAccountController и т. Д.
Таким образом, вы получаете много контроллеров.На заводе для контроллера предоставьте различные формы, в зависимости от того, какое действие запрашивается.
Построение контроллера становится зависимым от этой фабрики, а точнее от среды запроса (маршрутизация и т. Д.). Вы можете сконструировать контроллер напрямую (для тестирования или чего-либо еще), но тогда вам нужно будет убедиться, что зависимости доступны, и генерировать исключения если не.Используйте менеджер событий, вызывайте событие в контроллере, когда требуется форма, и позволяйте обработчику событий предоставлять зависимость по требованию.
Эта техника описанаВот.Ваш контроллер будет зависеть от EventManager, а не от ServiceLocator, что, вероятно, не намного лучше.Передайте FormElementManager контроллеру и запросите формы у него.
Не лучше, чем сам SL, скорее всего.Непосредственно построить формы внутри контроллеров.
Как это влияет на тестируемость?Тот же вопрос будет применяться для обработки контроллера с несколькими службами (вместо форм).Другие?
Смотрите также:
Передача форм по сравнению с необработанным вводом на сервисный уровеньФабричные классы против замыканий в Zend Framework 2