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