Модели также инкапсулируют бизнес-логику и управляют взаимодействиями друг с другом.Например, если сообщение имеет комментарии, это то, что будет обрабатываться в модели.Вы не хотели бы, чтобы контроллер извлекал сообщение, а затем извлекал комментарии и собирал их.Это возложило бы ответственность за знание структуры модели на контроллере, где он не принадлежит.
Действительно, существует много приложений, в которых модели не содержат очень много логики, если таковые вообще имеются.Модель с только полями данных и без бизнес-логики может рассматриваться как DTO (объект передачи данных) или просто как «объект», поскольку она не «моделирует» какую-либо бизнес-логику.Это не обязательно плохо, это зависит от потребностей.Многие приложения являются простыми приложениями над формами над данными и не нуждаются в какой-либо дополнительной логике.
Но если ваше приложение имеет больше логики, чем просто данные, содержащиеся в любой данной таблице, эта логика применяется в моделях.Они не просто моделируют данные, они моделируют домен.На самом деле, модели нередко не имеют одинаковую структуру базы данных.Модели являются объектно-ориентированными, тогда как базы данных гораздо чаще являются реляционными.Эти двое не всегда решают проблемы одинаково.Если вашим моделям необходимо точно копировать таблицы, вы ограничиваете себя в более объектно-ориентированных возможностях.
Короче говоря, все, что объясняет, что делает бизнес, входит в модели.Контроллеры - это просто обработчики событий, отвечающие на запросы интерфейса пользователя.Контроллеры обычно настраиваются для конкретного приложения, в то время как модели должны многократно использоваться в нескольких приложениях, поскольку они представляют ядро бизнес-логики.