Мы используем следующие слои:
- Представление (со строго типизированными моделями представления)
- Контроллер
- Просмотр модели службы
- Бизнес-услуги
- Репозитории
- (EF) Контексты
Представления - настолько тонкие, насколько это возможно - без логики - просто отображение
Модели представлений - строго типизированные для каждого представления - не содержат сущностей, а содержат только те поля, которые нам нужны в любом представлении.
Контроллер - только маршрутизация и звонки на VMS. Обрабатывает исключения, которые всплывают с нижних уровней, перенаправляя на страницы ошибок.
View Model Services - создает и распаковывает модели представления в сущности EF. Нет логики доступа к данным. Один VMS на контроллер. Активно использует AutoMapper для передачи данных модели представления в сущности.
Бизнес-услуги - основная точка доступа к данным. Одна BS на контроллер. Использует столько репозиториев, сколько требуется для выполнения своей работы. Контроллер области транзакции здесь. VMS делает один вызов BS, который при необходимости объединяет все необходимые вызовы DB в одну транзакцию. Мы ожидаем, что BS будет звонить во внешние службы в будущем.
Хранилища - по одному на каждую сущность (верхнего уровня) - выполняют все операции CRUD для группы сущностей. Наши сущности - это большие сложные графы объектов, поэтому мы обрабатываем самый верхний родительский элемент для каждого репозитория.
Контексты - тонкие оболочки вокруг контекстов, сгенерированных EF, чтобы их можно было высмеять.
С точки зрения MVC - часть модели состоит из всего, что находится ниже контроллера.
person
Colin Desmond
schedule
19.09.2010