EAV в рамках структуры 4 и ddd

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

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

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

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

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

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

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


person Konst Fom    schedule 21.12.2010    source источник
comment
Конст, не могли бы вы объяснить, что означает EAV? Кроме того, это может помочь вам получить ответы, если вы немного лучше отформатируете свой вопрос.   -  person Josh Kodroff    schedule 17.01.2013
comment
en.wikipedia.org/wiki/   -  person David Masters    schedule 16.04.2013
comment
eav является противоположностью ddd, ddd делает неявное явным, а в eav ничего явного ИМХО   -  person remi bourgarel    schedule 24.04.2013
comment
Как сказал @remibourgarel, EAV не подходит для DDD, EAV предназначен для решения проблем с реляционной базой данных для представления объектов, в то время как DDD собирается иметь код, который не является постоянным.   -  person Boris Guéry    schedule 03.02.2014


Ответы (1)


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

person Holger Thiemann    schedule 09.03.2015