2011-02-18 2 views
2

Итак, я принимаю всевозможную отличную информацию о MVC, EF4, шаблоне репозитория, UoW, слоях обслуживания и т. Д., И теперь я попытаюсь собрать все это вместе.ASP.NET MVC Application Design

Мой вопрос: как их отделить?

я думал такие проекты, как это:

1) Применение - MVC App
2) Repository Layer 3) Субъекты - Ef4/Частичные классы сущностей

Любые предложения было бы здорово !!

Спасибо, Sam

+1

Это отличный вопрос для тех из нас, кто знаком с шаблоном MVC и хочет получить больше знаний о надлежащей архитектуре. Я с нетерпением жду ответа – stephen776

ответ

5

Вот один пример того, как можно структурировать приложение:

  1. Доменные модели (объекты первичного POCO)
  2. Хранилища (реализация некоторых технологий доступа к данным в зависимости от требования к проекту: EF, NHibernate, LINQ to XML, вызовы удаленных веб-сервисов, ...)
  3. Служба (бизнес-операции, объединяющие несколько операций CRUD в бизнес-операцию, л подвергаться с объектами домена)
  4. ASP.NET MVC приложений (контроллеры, представление, просмотр моделями, Картостроителями между объектами домена и моделью просмотра)

Этих слои могут представлять собой физическое разделение (сборки) или логическое разделение на одну и ту же сборку.

+0

У вас будет образец, на который я мог бы смотреть? Я немного запутался в 1 и 2. Не могли бы вы рассказать об этом немного? Кроме того, уровень сервиса, работает ли он с созданными EF объектами? Является ли объект объектами генерируемых объектов EF? - Благодаря!! – Sam

+3

@Sam Striano, вот одна модель проекта MVC, которую я написал (ни один сервисный уровень => контроллеры не вызывают репозиторий): https://github.com/darind/samplemvc. Позвольте мне попытаться уточнить: уровень сервиса не работает с созданными EF объектами. Он работает с моделями доменов, которые вы определили в 1. Объекты EF загрязнены специальными элементами EF (если вы не используете Code First, и в этом случае ваши модели EF Code First станут точкой 1.). Модель не должна быть связана с любой используемой вами технологией доступа к данным. Для меня автогенерируемые классы EF никогда не должны покидать границу их соответствующего слоя. –

+0

В вашей примерной структуре приложения, где находится EF, и где находится сервисный уровень? - Благодаря!! – Sam

3

Не разделяйте код физически, пока у вас не возникнет физическая причина, например, причины развертывания или совместного использования кода. Используйте папки и пространства имен.

+1

Создание отдельных проектов действительно тривиально, когда вы начинаете проект. Он обеспечивает хорошее разделение в вашем коде (без перекрестных зависимостей между слоями) и уменьшает потенциальную головную боль рефакторинга в будущем. Я не вижу причин не делать этого. Плюс, если вы делаете TDD, это меньше кода для постоянной перестройки, тем самым ускоряя ваш цикл разработки/не прерывая ваш мыслительный процесс так часто. – Ryan

3

Я только что прошел через это сам и, безусловно, лучший подход, который я нашел, это S#arp Architecture.

Превосходные шаблоны генерируют проектные леса для вас, и у них есть хорошее объяснение, почему вам действительно нужно физическое разделение проектов. Good argument here. В руководстве Theyre показано, как TDD с этой моделью является легким.

Красота этой модели - это разделение проблем, которые она предлагает, поэтому, если вы действительно хотите использовать EF, ее snip заменит NHibernate.