EAV в рамках сущности 4 и DDD - PullRequest
4 голосов
/ 21 декабря 2010

Некоторые таблицы в моей базе данных разработаны с использованием концепции EAV.Затем я использую сущности, которые автоматически генерируются и представляют «статические» таблицы (не таблицы «EAV») ORM Entity Framework в качестве объектов DDD.

  1. Как я могу использовать свои сущности «EAV» в объектной модели(не в реляционной, как в базе данных) с использованием Entity Framework?

Например,
в базе данных у меня есть статическая таблица Report и таблицы EAV, которые помогают мне хранить ReportProperty для отчета.
Вмодель предметной области, которую я хочу, чтобы Report был таким:

Report
{
     ICollection<ReportProperty> ReportProperties{get;set;}
}

Я могу использовать сущность Report, сгенерированную Entity Framework, и в частичном разделе реализовать некоторую логику в получателе для получения данных из моих таблиц EAV для заполнения Collection ReportProperies.Тогда напрашивается следующий вопрос.

Что я могу сделать, если я решу использовать NHibernate вместо Entity Framework, потому что я не могу использовать свой частичный раздел, который я уже понимаю, используя Entity Framework?

Если я буду использовать объекты DDD,который я могу использовать для Entity Framework или NHibernate, это вряд ли будет для меня, потому что мне понадобятся процедуры сопоставления вызовов в каждой процедуре моего DAO.

1 Ответ

1 голос
/ 09 марта 2015

EAV - это концепция уровня доступа к данным, в то время как DDD - это концепция уровня бизнес-логики.ORM, такие как Entity Framework или NHibernate, соблазняют нас смешивать оба эти уровня, но в сложных проектах со сложной логикой (вот где нужен DDD) этого никогда не должно происходить.Так что поделите свой Dal и Bll.Используйте созданные вручную классы для объектов DDD и используйте автоматически сгенерированные (или сначала кодируемые) классы для Entity Framework и предоставьте слой отображения между ними.Тогда EAV будет просто деталью реализации вашего Dal.Кроме того, ваши Bll и DDD классы не должны будут меняться, если вы переключитесь на NHibernate.Просто ваш картографический слой будет.И, кстати, используйте Deverdency Inversion.Заставь своего Даля зависеть от тебя, Bll, а не наоборот.Если вы сделаете слой отображения физически отделенным от ваших частей Entity Framework, то используйте шаблон-посредник на уровне сборки (то есть ваш слой отображения зависит от вашего Bll и вашего Dal, а не наоборот).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...