Entity Framework и трехуровневая архитектура - PullRequest
4 голосов
/ 05 июля 2011

У меня есть программа трехуровневой архитектуры.Вопросы:1. Доступ к данным это уровень EF?2. Если я хочу использовать объект, сгенерированный EF на уровне представления, я ссылаюсь на доступ к данным, но это нарушает принципы трехуровневой архитектуры.

Ответы [ 5 ]

2 голосов
/ 06 июля 2011

Microsoft Испания выпустила довольно хорошую документацию, руководство и пример приложения для N-слойных приложений на codeplex, вы можете посмотреть его здесь:

http://microsoftnlayerapp.codeplex.com/

Вы найдете много направленийи полезные шаблоны реализации там.

hth.

1 голос
/ 05 июля 2011

Какой тип приложения вы создаете? Если вы создаете приложение ASP.NET MVC 3, вы можете сделать так, чтобы ваш View был уровнем представления, ваша модель - вашим доступом к данным (который может использовать EF), а контроллер и / или фильтры действий могут содержать вашу бизнес-логику, и в этом В сценарии вы будете использовать свою модель EF на уровне представления, но все же будете удовлетворять принципу разделения интересов.

1 голос
/ 06 июля 2011

EF выполняет две функции: -

1) Создает модель домена для вас (необязательно, но часто используется) 2) Предоставляет вам возможность запрашивать / изменять базу данных с помощью этой модели домена.

Это может создать впечатление размытия границ между моделью предметной области и доступом к данным, но они действительно разделены.

Пока вы не занимаетесь такими вещами, как создание контекстов объектов и написание запросов непосредственно в вашемпрезентация сокращает ИМХО, что вы не нарушаете абстракцию - единственное, что вы «ломаете», это тот факт, что вам нужно будет ссылаться на System.Data.Objects (или чем-то вроде EF dll) в вашем (-их) проекте (-ах) презентации (который являетсяпросто физический артефакт), если вы не пойдете по пути, предложенному Jethro, чтобы сгенерировать вашу модель предметной области в отдельный проект.

1 голос
/ 05 июля 2011

Да, EF будет вашим уровнем доступа к данным.С EF вы можете использовать шаблоны T4 с поддержкой POCO, затем вы можете извлечь эти POCO в отдельную dll, и это будет ссылка со всех ваших слоев.

0 голосов
/ 06 июля 2011

Для трехуровневой архитектуры.Я хотел бы рассмотреть возможность использования абстракции с использованием модели доменной модели и модели данных, а не прямого EF из уровня представления.

Таким образом, идея заключается в том, что у вас есть модель данных, которая имеет классы EF POCO с репозиториями, которые знают, как получить доступ к этимЗанятия по различным CRUD.

Ваша модель домена будет иметь модели, связанные с вашим клиентом (так что вы можете добавить различные коды ViewModels или проверки), это может быть веб-приложение WPF или MVC.Теперь между этими двумя существует бизнес, который общается с моделями доменов и данных.

Ваш уровень представления ничего не знает о EF / уровне данных / репозитории.Когда вы хотите представить новую платформу данных или базу данных, вам просто нужно написать новые классы репозитория и классы моделей данных (которые, вероятно, должны быть с каким-то кодом).

Это также позволяет вашему коду быть модулемтакже тестируемый.

...