Я много лет разрабатываю корпоративные приложения с использованием .Net. Мои приложения обычно имеют модель предметной области, содержащую сущности, отображаемые в таблицы базы данных SQL. Я использую шаблон репозитория, внедрение зависимостей и сервисный уровень.
Недавно мы начали работать над проектами MVC 3, и у нас были дебаты, где какую логику разместить. Я столкнулся с тонкой архитектурой контроллера / модели FAT и задался вопросом, как будет вписываться сервисный уровень.
Вариант 1 — Модель общается с сервисами
Контроллер тонкий, вызывает методы на моделях. Модели «знают», как загружать себя из БД и общаться с репозиториями или сервисами. Например. CustomerModel имеет метод Load(id) и загружает клиента и некоторые дочерние объекты, такие как GetContracts().
Вариант 2. Контроллер общается со службами
Контроллер запрашивает службы для извлечения объектов модели. Логика загрузки/сохранения и т.д. находится в сервисном слое. Модель представляет собой чистую модель объекта только с данными.
Почему вариант 1 был бы лучшим выбором, особенно когда мы говорим о корпоративных приложениях, мой опыт подсказывает мне, что нужно разделять проблемы, сохранять модели и контроллеры как можно более тонкими и иметь специализированные службы, выполняющие бизнес-логику (включая взаимодействие с БД)
Спасибо за все советы и ссылки на хорошие ресурсы.