Как моделировать агрегаты с помощью Entity Framework? - PullRequest
3 голосов
/ 07 сентября 2010

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

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

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

Ответы [ 2 ]

2 голосов
/ 07 сентября 2010

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

1 голос
/ 30 сентября 2010

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

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

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

С наилучшими пожеланиями, Саймон

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