Моя первая мысль - избегать обработки каких-либо запросов в модели. Это работа контроллера. И вот почему: предположим, у вас есть модель, которая обрабатывает ваши запросы (GET или POST). Эта структура, вероятно, будет хорошо работать изначально. Теперь предположим, что вы хотите добавить какую-то функциональность AJAX или установить служебный интерфейс в вашей системе. Теперь, когда вы принимаете больше, чем просто GET / POST, то есть JSON или XML, ваша модель должна будет различать каждый тип запроса и знать, как их анализировать. Я считаю, что разрушает много простоты и ясности модельного кода. Я согласен, что уровень контроллера должен быть тонким, но он также должен иметь роль и опыт. Для меня экспертиза контроллеров заключается в следующем:
- Обработка входящих запросов
- Данные доставки к модели
- Запрос / принятие данных от модели
- Передать модель данных в представление
Я колеблюсь, насколько представление должно знать о модели. Некоторые люди рекомендуют, чтобы модель шла прямо в поле зрения, но я думаю, что это хрупкое сцепление. Это часто приводит к логике в представлении. Кроме того, если вы работаете над проектом, в котором члены команды, работающие над представлением, не так разбираются в программировании, как основные разработчики, это накладывает на них большую нагрузку, чтобы не отставать от изменений. Я склонен упаковывать данные, которые я передаю своим представлениям, в нейтральную структуру, а не передавать полные модели.
Моя интерпретация MVC в основном прагматична. Работа модели заключается в модели домена, в котором вы работаете, и не должно заботиться о том, откуда поступают данные. Я часто структурирую код модели, предполагая, что он может использоваться вне веб-приложения, возможно, в приложении командной строки или в настольном приложении. Такое объединение случается редко, но оно приводит к четкой цели каждого слоя. Работа контроллеров заключается в перемещении данных между вовлеченными сторонами, будь то запросы клиентов, модели или представление. Контроллер должен иметь очень мало логики домена, но это не значит, что у него нет кода. Наконец, вид должен выглядеть красиво. Надеюсь, это поможет.