Я не рекомендую рассматривать модель как просто уровень доступа к данным. Это упрощает, и это приводит к тому, что вы добавляете слишком много кода в уровень контроллера. Лучше, если вы поместите больше кода в модель и сделайте упорство базы данных только частью внутреннего кода модели. Мне нравится думать о MVC, как это:
- контроллер: ручка ввода, определить, какая модель и какой вид инстанцирует
- Вид: презентация данных приложения
- Модель: все другие логические схемы для применения, в том числе но не ограничиваясь ими, DAL
Это, в основном, шаблон Page Controller.
Еще один способ подумать об этом: предположим, вам пришлось переносить ваше веб-приложение на другую платформу, например, приложение из командной строки или приложение для графического интерфейса пользователя. Какие части логики приложения следует использовать повторно? Контроллер и просмотр будут меняться при переносе приложения на другую платформу, потому что реализация обоих входных и выходных данных должна измениться. Код, который не нуждается в изменении, должен быть реализован в вашей модели.
Если вы правильно разделили проблемы, то модель, представление и контроллер будут минимально связаны, и вы можете изменить реализацию одного, не слишком сильно влияя на других. Если вы измените модель, и вы обнаружите, что переписываете большое количество кода в контроллере или в представлении, вы, вероятно, не разделили эти уровни адекватно. И наоборот.
Подробнее о противотанковых устройствах Martin Fowler's Anemic Domain Model или Domain Driven Design Quickly, чтобы получить некоторые другие перспективы.
Также см. Мой blog from 2008, который я написал в ответ на людей, осуждающих шаблон активной записи. У него были хорошие комментарии и дискуссии.
Согласен. Тощие контроллеры и жирные модели облегчают мою жизнь. –