Entity Framework в многослойном приложении - PullRequest
3 голосов
/ 10 июля 2011

Я пытаюсь использовать EF4.1 в настройках, где у меня будет DAL (уровень доступа к данным), BLL (уровень бизнес-логики), а затем уровень представления (обычно веб-приложение ASP.NET или консольное приложение).

В настоящее время я делаю все свои проекты, используя LINQ to SQL, и у меня есть настройка, которая использует несколько слоев, как описано выше.

Хотя при рассмотрении EF все примеры просто используют один слой или, возможно,В двух слоях трудно найти полный пример, который использует DAL и BLL.

Самое близкое, что мне сейчас нужно, - это использовать генератор кода POCO для создания классов POCO, а затем повторнонайдите эти классы в моем проекте BLL - и .edmx и контекст объекта остаются в DAL.

Проблема с этим, хотя DAL нуждается в ссылке на BLL, чтобы он знал о классах POCO -в идеале ссылка должна быть наоборот.Если DAL имеет ссылку на BLL, у меня также не может быть ссылки из BLL на DAL - потому что у вас не может быть циклических ссылок, поэтому я не могу ничего делать с контекстом объекта, например, вызывать метод сохранения изменений из bll.

Во всяком случае, у меня возникли некоторые проблемы со всем этим.

Я подумываю сделать что-то по-другому (аналогично тому, что я делаю в настоящее время с LINQ to SQL), гдеобъекты сущности EF остаются в DAL, и я записываю свои собственные классы BLL, которые просто «возвращаются» к их счетным частям объекта DAL.Таким образом, DAL может иметь ссылку на BLL и BLL.

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

1 Ответ

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

Ну, я задал себе тот же вопрос несколько месяцев назад.

Я нашел официальный документ от Microsoft о наслоении, и я могу вспомнить, что они считают EF компонентом BLL + DALв некоторых сценариях.

и в моем случае вот что я делал до сих пор:

  • Я создаю только два слоя: представление (ASP.Net) + бизнес-уровень (содержащий классы EF, EDMX и контекст БД)
  • Я управляю контекстом БД на уровне презентации (чтобы иметь больше контроля через сеансы или запросы Http в течение жизненного цикла моих объектов EF)

На самом деле я объединяю BLL + DAL.Но я должен признать, что не участвую в проектах с очень сложными бизнес-процессами.Я знаю, что он не идеален со строгой архитектурной точки зрения, но он хорошо работает для того типа проекта, который мне приходится обрабатывать.

В первый раз я создавал 3 слоя, но доходит докошмар, когда вам приходится постоянно создавать «тупые» классы для сопоставления DAL и презентаций.

Зависит от ваших данных и сложности бизнес-модели, я думаю ..

...