Я видел код, написанный там, где почти весь код, не связанный с маршрутом, передается модели. Я также видел код, где все стойкость базы данных обрабатывается моделью, но обработка не-DB обрабатывается контроллером.
Какой подход лучше?
Линия между контроллером и моделью на самом деле понятна.
Модель – это ваше приложение. Он содержит логику бизнеса / домена, необходимую для решения проблемы, на которую было написано ваше приложение. Модель обычно накладывается на несколько других слоев, например, настойчивость, службы, домен и т. Д. Это распространенное заблуждение, что модель – это просто база данных, поскольку это распространенное заблуждение, что база данных должна быть ActiveRecord.
Контроллер (и вид) являются частью уровня представления. Единственная ответственность контроллера – получать и обрабатывать ввод пользователя, направленный на ваше приложение, и делегировать его соответствующим частям модели. Больше ничего. Он не должен обрабатывать сложный поток приложений или код вашего проблемного домена. Вы хотите, чтобы контроллеры были тощими и моделировали с логикой . Модель не должна знать ни о C, ни о V, и вы должны иметь возможность менять V и C для другого уровня представления, не прикасаясь к своему M.
См. Выдержку MVC в шаблонах архитектуры корпоративных приложений