Я не рекомендую рассматривать Модель как просто уровень доступа к данным. Это чрезмерное упрощение и приводит к тому, что вы помещаете слишком много кода на уровень контроллера. Лучше, если вы поместите больше этого кода в Модель и сделаете постоянство базы данных только частью внутреннего кода Модели. Мне нравится думать о MVC так:
- Контроллер: обрабатывать ввод, определять, какую модель и какое представление создать.
- Просмотр: представление данных приложения
- Модель: вся остальная логика для приложения, включая, но не ограничиваясь, DAL.
По сути, это шаблон Контроллер страницы.
Еще один способ подумать об этом: предположим, вам нужно было перенести свое веб-приложение на другую платформу, такую как приложение командной строки или настольное приложение с графическим интерфейсом. Какие части логики приложения следует использовать повторно? Контроллер и представление будут меняться по мере того, как вы переносите приложение на другую платформу, потому что потребуется изменить реализацию как ввода, так и вывода. Код, который не нужно изменять, должен быть реализован в вашей модели.
Если вы правильно сделали разделение задач, тогда модель, представление и контроллер будут минимально связаны, и вы сможете изменить реализацию одного, не слишком сильно влияя на другие. Если вы меняете Модель и обнаруживаете, что переписываете много кода в Контроллере или Представлении, вы, вероятно, не разделяете эти слои должным образом. И наоборот.
Прочтите об антипаттерне Мартина Фаулера Модель анемического домена или Домен-ориентированный дизайн быстро, чтобы получить некоторые другие точки зрения.
Также см. Мой блог 2008 года, который я написал в ответ людям, осуждающим паттерн Active Record. Он получил несколько хороших комментариев и обсуждений.
person
Bill Karwin
schedule
18.11.2009