Односборочные проекты только для небольших проектов
Мне никогда не нравилась папка "Модели". Я скорее помещаю отдельные слои / ярусы в отдельные сборки. Шаблон проекта MVC просто создает многоуровневое приложение в одной сборке.
Я предпочитаю решения, сделанные из нескольких проектов:
- Web - интерфейсное веб-приложение, т.е. Asp.net MVC (ссылки Сервисы и Объекты )
- Службы - сборка бизнес-уровня (ссылки Данные и Объекты )
- Объекты - классы POCO, интерфейсы и т. Д., Которые являются общими для всех (не относится ни к какому другому проекту решения)
- Данные - Фактическая модель EF и расширения, репозитории и т. Д. (Ссылки Объекты )
Это гораздо более управляемый и структурированный способ, если ваше приложение больше нескольких простых экранов.
Так в прошлом проекте: модель EF была в проекте Data (а также в репозиториях и т. Д.), А POCO - в объектах. Все взаимодействие между проектами осуществлялось с помощью классов из проекта Objects.
Итак Веб используется Сервис ,
которые в свою очередь использовали репозитории (в Data ),
который в свою очередь вызвал EF для манипулирования данными.
Все данные, передаваемые туда и обратно, используют POCO в Objects .
Таким образом, репозитории должны были преобразовывать сущности в фактические POCO (они не были 1: 1) при возврате данных и создании сущностей при выполнении операций записи. И это преобразование было выполнено с помощью методов расширения для сущностей, поэтому преобразование всегда выполнялось в одном методе, что облегчало его поддержку, когда мы либо меняли сущность, либо класс POCO. Нам не нужно было сканировать весь код для всех преобразований, мы просто настроили наш метод расширения ToPoco()
(они на самом деле назывались так).