Существует популярная парадигма веры, которая гласит:
Тонкие контроллеры, толстые модели.
Это означает, что ваш контроллер должен нести ответственность только за выполнение минимума, чтобы убедиться, что действия изменяют состояние моделей и обеспечивают правильное представление взамен. Имея это в виду, проверка должна происходить в ваших моделях. Но ... подожди минуту. Модели не обязательно должны быть одноуровневыми.
Я считаю, что среди программистов .NET следующая установка (или что-то подобное) является довольно распространенной практикой (если масштаб проекта подтверждает это):
Controller
-> ServiceLayer
-> Repository
-> DataObject
И я начинаю так же, как эта установка все больше и больше. Более того, я считаю, что эта настройка очень выполнима в среде Zend Framework.
Термин Модель - это несколько расплывчатый термин. В приведенном выше примере вы можете рассматривать три последних слоя как слой модели. Эти три слоя представляют собой следующее:
- ServiceLayer
Ответственный за бизнес-логику. Другими словами: извлечение объектов данных (моделей) из репозитория, связывание моделей вместе, И проверка моделей перед их сохранением , отправка почты пользователю и т. Д.
- Репозиторий
Механизм персистентности некоторого типа (например, база данных), который обслуживает объекты DataObject для уровня обслуживания и сохраняет объекты DataObject обратно в механизме сохранения ( после того, как уровень сервиса их подтвердил )
- DataObject
Вы можете считать это актуальными моделями. Предпочтительно объекты DataObject имеют общие интерфейсы (независимые от репозитория, то есть), так что репозитории взаимозаменяемы. Другими словами, когда хранилище изменяется из базы данных в XML-файл из какого-либо веб-сервиса, DataObject по-прежнему имеет тот же интерфейс, что и сервисный уровень, и в конечном итоге представление может работать с ним.
Надеюсь, это имеет смысл. Это в основном мое понимание более многоуровневой установки MVC прямо сейчас. Если кто-то считает, что я что-то перепутал, поправьте меня.
Пожалуйста, имейте в виду, что не все проекты достойны такой многоуровневой установки. В небольших проектах вы, возможно, можете сделать это с помощью всего лишь одного слоя модели. В этом случае проверка должна оставаться обязанностью Модели. Контроллер должен быть тонким (только для связывания состояния модели и представлений вместе с помощью действий).