2010-08-15 1 views
2

Я разрабатываю проект ASP.NET среднего размера с использованием ASP.NET MVC и Entity Framework. Я разработал систему 3-го уровня, установив 3 Визуальные проекты Студии и ссылки на них соответственно:Является ли мой 3-уровневый (n-ярус) архитектуры хорошим дизайном?

  • Презентации - Это мой проект MVC и содержит все виды и контроллеры. Я полностью удалил папку с моделью из этого проекта, так как я перемещаю его в проект BO (см. Ниже)
  • Business Objects (BO) - Этот проект содержит «мясо» приложения, и это где реальный сердце приложения находится. Здесь определяются объекты, которые представляют вещи, которые я пытаюсь моделировать в коде (User, Facility, Appointment и т. Д.).
  • Доступ к данным (DA) - Этот проект до сих пор является платформой Entity Framework.

«Проблема», с которой я сталкиваюсь, заключается в том, что я делаю много ручного сопоставления «один-к-одному» в BO. Например, когда вызывается User.load(), я загружаю пользователя из EF, затем сопоставляю ряд параметров (имя, фамилия, имя пользователя, активный и т. Д.) Из результата EF в параметры объекта.

Я считаю это хорошим и плохим. Хорошо: он отключает EF от проекта, поэтому, если мне когда-либо понадобится использовать другое хранилище данных, я не привязан только к EF. Плохо: требуется немного больше времени, потому что я должен настроить каждый параметр и тщательно обрабатывать их на Add(), Update() и т. Д., Реализуя мое собственное отслеживание изменений.

Что вы думаете об этом подходе?

ответ

0

разъединением EF от проекта

которая действительно хорошо.

Я делаю много ручного отображения один-к-одному в BO

Я предлагаю вам взглянуть на AutoMapper.

Я нахожу книгу ASP.NET MVC в действии от Manning неплохо. Вторая версия, недавно выпущенная, также содержит небольшую главу о включенном AutoMapper. Это не в бесплатных главах примеров, но вы можете проверить исходный код (или купить книгу, конечно).

0

Если вы используете .Net 4.0, вам следует обязательно подумать о создании и использовании объектов POCO вместо EntityObject, который не только дает вам Persistence Notorance (что вы упомянули), но и вам не понадобится какой-либо Mapper между ними, поскольку вы работайте с POCOs (обычный объект CLR) во всех слоях, включая доступ к данным. Если вы не работать с EF & Pocos, то это будет хорошим началом: http://blogs.msdn.com/b/adonet/archive/2009/05/21/poco-in-the-entity-framework-part-1-the-experience.aspx

Если вы используете .NET 3.5 SP1 и не можете обновить до 4.0, то как XIII правильно сказано, AutoMapper будет автоматизировать отображение или вы можете придумать свой собственный AutoMapper, который представляет собой не что иное, как простой код отражения.