Я просто хотел получить совет относительно того, как вести себя в MVC. Я использую codeigniter и мне было интересно, лучше ли иметь один контроллер на страницу для веб-сайта или один контроллер для всех страниц?
Допустим, у меня есть простой веб-сайт, на котором вы можете посетить домашнюю страницу, войти в систему, создать учетную запись и связаться с администратором.
Было бы лучше иметь эти контроллеры: внешний интерфейс (индекс), логин, учетную запись, контакт ИЛИ с одним контроллером, называемым внешним интерфейсом, или что-то еще с такими действиями, как вход в систему, createAccount, контакт?
Когда вы знаете, лучше ли использовать один контроллер в ситуации?
Ответы:
Лучше иметь контроллер для каждой логической единицы, например AccountController (вход в систему, регистрация), PagesController (дом, контакт), Backend -> PagesController (создание, редактирование, удаление), UsersController (создание, редактирование, удаление) и так далее.
источник
@Rushino У вас есть два «приложения» здесь - интерфейс (для читателей) и сервер (для администраторов). Для каждой группы функций у вас есть контроллер.
Вход в систему - это такая группа, которая включает в себя создание формы HTML (поля, вызывающие представление) и обработку формы (проверка, связывающаяся с моделью). Таким образом, 'login' - это контроллер с двумя действиями - generateForm и handleForm.
Страницы разделены между внешним приложением - которое просто показывает страницы - и внутренним приложением, которое позволяет редактировать, удалять, создавать и, возможно, просматривать их по-другому. Домашняя страница - это, по крайней мере, «просто еще одна страница» на переднем конце, так что помещается в контроллер страниц. С другой стороны, его логика может быть достаточно разной, чтобы полностью оправдать наличие другого контроллера.
Для пользователей - если пользователи могут зарегистрироваться самостоятельно, им потребуется контроллер внешнего интерфейса, но если нет, все, что связано с пользователями, просто отправляется в бэкэнд.
Обратите внимание, что для каждой из внутренних функций могут потребоваться как генератор, так и обработчик. Эти вещи могут быть разбиты на конфигурационные файлы с помощью плагина, который является генератором общих форм.
В итоге это выглядит так:
источник
Я думаю, что вы должны использовать контроллер для каждого подразделения, например OrdersController для всех операций, связанных с заказами и тому подобное. Мне известно, что в этом случае контроллеры получают ОГРОМНОЕ, но мы все еще можем использовать вспомогательные классы для делегирования таких вещей, как инициализация модели и частичные классы, для распределения действий в отдельных файлах.
Например, у меня может быть OrdersController
Create.cs and OrdersController
файлы List.cs для класса OrdersController, каждый с соответствующим набором Actions. Делает вещи намного чище и сохраняет централизованные операции с заказами в одном классе контроллеров.Просто мои 2 цента.
источник
Я думаю, что вы могли бы использовать другой подход:
Один главный контроллер в качестве входной двери, который доставляет запрос к конкретным контроллерам. Таким образом, вы можете использовать этот фронт-контроллер для проверки общих вещей, таких как аутентификация пользователя, аналитика Google и любые другие общие вещи, которые вы хотели бы сделать, и сохранить структуру MVC в чистоте.
Это не моя идея, но Symfony Framework работает таким образом, поэтому я могу сказать вам, что по моему опыту это действительно хороший и элегантный способ реализации внешнего интерфейса.
источник