Сколько действий на контроллер в MVC - PullRequest
0 голосов
/ 08 ноября 2018

Я знаю, что название вопроса довольно расплывчато, но я не мог придумать ничего более чистого. (И хотя это может показаться вопросом ZF, на самом деле это просто вопрос php MVC.)

Я недавно перенес проект с ZF2 на ZF3. Основным отличием была необходимость внедрения зависимостей в каждой модели и контроллере. Поскольку я теперь ввел все зависимости вместо того, чтобы вызывать их с помощью serviceLocator (который лениво загружает службу), я застрял с парой вопросов.

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

У меня такой вопрос, и в основном это был мой вопрос с тех пор, как я начал работать с MVC, насколько конкретно вы бы сделали контроллер? Сколько действий на контроллер? Или в этом случае может быть: сколько сервисов на контроллер?

Теперь я даже думаю о разделении каждого контроллера, чтобы у всех действий был свой контроллер. Это хорошая / плохая идея?

Есть мысли?

1 Ответ

0 голосов
/ 09 ноября 2018

Лично я стараюсь сосредоточить внимание контроллера на одном действии. Но он должен быть в состоянии сделать / вызвать все необходимое для завершения действия.

Например, у вас есть объект продукта. Для базового CRUD (я использую iCRUD, почему бы и нет?). Я бы создал 5 контроллеров: Index, Add, View, Edit, Delete (семантика, если вы используете Add / Create, View / Read и т. Д.).

Самый большой из них - это Edit, который должен «получить» существующий продукт, загрузить его в форму и вернуть его только для настройки страницы редактирования. По POST данных ему нужно будет получить существующий продукт, загрузить его в форму, получить данные запроса и загрузить его в форму, проверить, подготовить к хранению, сохранить и вернуть ответ.

Но я предпочитаю, чтобы он мог делать все это, но сосредоточил его на этом действии.

Вы можете, конечно, иметь все действия (i) CRUD в одном контроллере и все равно правильно применять MVC. Лично я считаю чище отделить их. В любом случае из пространства имен вы сможете определить, для какого класса вы смотрите.

Пример из проекта ниже:

enter image description here

По моему мнению, ясно, что здесь мы рассматриваем модуль User, подпространство имен контроллера, ориентированное на объект User. (В этом модуле есть братья и сестры для объекта User: Route, Role и т. Д.)


Должен сказать, что для этого есть как за, так и против.

Pro-х:

  • Чисто и ясно, где вы должны быть для чего-то
  • Разделение интересов
  • Довольно СУХОЙ (не повторяйся)
  • Простое повторное использование контроллеров действий для различных предметов (например, создание более абстрактного "ViewController" и реализация для каждого предмета: продукт, пользователь, адрес и т. Д.)

Con-х:

  • Довольно СУХОЙ (не повторяйте себя) (посмотрите, что я там делал? Нужно сделать это с предварительной загрузкой форм и тому подобное)
  • Дополнительная конфигурация в таких средах, как Zend Framework 3 (дополнительные комбинации Controller / Factory для регистрации)
  • Дольше настраивается, рефакторинг "больше"
...