Управление зависимостями в приложениях Zend Framework 2 MVC

Поскольку ServiceLocatorAwareInterface, скорее всего, будетудален из абстрактного контроллера в ZF3вместо этого зависимости должны передаваться через конструктор или через методы установки.

Имея это в виду, рассмотрим вариант использования пользователя или контроллера сайта с такими действиями, как регистрация, активация учетной записи, вход в систему, выход из системы и т. Д. Как минимум, для этого потребуется UserService и 2 формы. Добавьте еще несколько связанных действий (удаленная аутентификация, связывание учетных записей и т. Д.), И вы получите 4 или 5 форм.

Передача всех этих зависимостей через конструктор будет в лучшем случае беспорядочной, и, что более важно, для каждого действия обычно требуется только 1 форма.

Какой из следующих методов вы считаете лучшим и почему?

Создайте отдельные контроллеры для каждого действия, чтобы каждому контроллеру требовалась только одна форма (в дополнение к услуге). Например, RegistrationController, LoginController, LinkAccountController и т. Д.

Таким образом, вы получаете много контроллеров.

На заводе для контроллера предоставьте различные формы, в зависимости от того, какое действие запрашивается.

Построение контроллера становится зависимым от этой фабрики, а точнее от среды запроса (маршрутизация и т. Д.). Вы можете сконструировать контроллер напрямую (для тестирования или чего-либо еще), но тогда вам нужно будет убедиться, что зависимости доступны, и генерировать исключения если не.

Используйте менеджер событий, вызывайте событие в контроллере, когда требуется форма, и позволяйте обработчику событий предоставлять зависимость по требованию.

Эта техника описанаВот.Ваш контроллер будет зависеть от EventManager, а не от ServiceLocator, что, вероятно, не намного лучше.

Передайте FormElementManager контроллеру и запросите формы у него.

Не лучше, чем сам SL, скорее всего.

Непосредственно построить формы внутри контроллеров.

Как это влияет на тестируемость?Тот же вопрос будет применяться для обработки контроллера с несколькими службами (вместо форм).

Другие?

Смотрите также:

Передача форм по сравнению с необработанным вводом на сервисный уровеньФабричные классы против замыканий в Zend Framework 2

Ответы на вопрос(2)

Ваш ответ на вопрос