Как моделировать агрегаты с помощью Entity Framework?

Хотя я уже довольно давно занимаюсь проектированием на основе предметной области (DDD), я относительно новичок в Entity Framework (EF), и при использовании Entity Framework Designer в Visual Studio у меня возник один вопрос: как Агрегаты должны быть представлены / смоделированы в EF.

Следуя передовым методам DDD, сущности должны ссылаться только на другие сущности (или объекты-значения) в пределах того же агрегата, а ссылки на другие сущности ограничиваются корневыми сущностями агрегатов (агрегатными корнями). Однако я не вижу ни одной из этих концепций, присутствующих в EF (т.е. все сущности обрабатываются одинаково, и, следовательно, никакие ограничения не применяются к ссылкам между сущностями).

Таким образом, я спрашиваю: Я что-то пропустил в EF, или он полностью не зависит от агрегатов, агрегатных корней и ссылок между сущностями? В последнем случае, как вы моделируете агрегаты при использовании Entity Framework?


person angelwithagun    schedule 07.09.2010    source источник


Ответы (2)


Я думаю, что DDD - это другой уровень абстракции, поэтому мой ответ - нет, EF по умолчанию не следует этим правилам. Вы должны моделировать свои объекты и репозитории в соответствии с DDD. Вы будете использовать репозитории для создания вашего агрегированного корня с загруженными связанными сущностями, относящимися только к текущему агрегированному корню, и вы будете использовать службы домена для работы с различными репозиториями.

person Ladislav Mrnka    schedule 07.09.2010

Я просто хотел поправить небольшую (но довольно важную деталь):

Вы заявляете, что «Сущности должны ссылаться только на другие Сущности (или Объекты-значения) в том же Агрегате».

Конечно, для этого могут быть некоторые аргументы, но это более строго, чем то, что рекомендует по крайней мере один ресурс в DDD: «Объектам внутри Aggregate должно быть разрешено содержать ссылки на корни других Aggregate». («Быстрая разработка на основе предметной области» Аврам и Маринеску).

С уважением, Саймон

person SimonT    schedule 30.09.2010
comment
Вы абсолютно правы, извините за непонятность. - person angelwithagun; 09.11.2010
comment
Дело в том, как вы гарантируете, что Entity Framework не будет обновлять ссылки на другие агрегированные корни (достигая их)? EF никогда не должен касаться сущностей из 2 агрегатов в одной транзакции. - person SuperJMN; 16.10.2014