Создание несвязанного N-уровневого Приложения с помощью Entity Framework и VB.NET

#asp.net #vb.net #entity-framework

Вопрос:

Итак, мы создаем приложение с

  • Уровень пользовательского интерфейса (веб, мобильный, Ajax-клиент и т. Д.)
  • Уровень сервиса/API
  • Уровень бизнес-логики
  • Уровень Доступа к Данным

Наша цель состоит в том, чтобы иметь зависимость Entity Framework от уровня обслуживания вплоть до DAL. Это означает, что слой Sevice будет принимать и возвращать только POCOs (обычные старые объекты CLR).

В настоящее время мы вручную кодируем слой сопоставления между уровнем обслуживания и уровнем бизнес-логики, который преобразует POCOs в сущности EF и наоборот.

Короче говоря, у страницы есть форма, у формы есть код, который берет содержимое формы, помещает их в POCO, отправляет его на уровень обслуживания. Уровень обслуживания преобразуется в сущность EF, отправляет ее на уровень бизнес-логики, который выполняет определенные преобразования для сущности, а затем взаимодействует с DAL, чтобы сохранить ее.

Да, это немного утомительно, но нам было интересно, есть ли лучший способ?

Да, я знаю, что кто-то опубликовал адаптер EF Poco, но все это на C#, и мы бы предпочли VB.NET решение.

Да, переход на NHibernate-это вариант в крайнем случае, так как мы уже глубоко вошли в наш цикл разработки.

Ответ №1:

Вы должны выполнять бизнес-логику в POCOs. Вся цель ORM заключается в том, что это деталь реализации. Бизнес — логика должна быть реализована в модели домена и в доменных службах-в бизнес-приложении «домен» означает «бизнес». DAL должен быть там, чтобы принять POCO и сохранить его — в вашем случае это означает сопоставление его с сущностью EF и сохранение ее.

Во всяком случае, это теоретическая / негибернатная модель.

Ответ №2:

Можете ли вы вынести наличие зависимости на уровне обслуживания от интерфейсов EF? Вы могли бы реализовать IPOCO.

Есть даже способ сделать это автоматически.