В DDD существует различие между сущностью и совокупностью. В EFCore я доволен подходом использования частных коллекций и использования шаблона спецификации для заполнения дочерних объектов, когда это необходимо. Точно так же Джули Лерман и другие написали действительно хорошие статьи по адаптации EF для DDD.
Агрегат, в отличие от сущности, может / должен содержать только ссылку на идентификатор другого агрегата, а не свойство навигации, которое мы можем использовать для возврата через репозиторий с помощью вызова GetById()
.
Что является еще одной проблемой, это определить, как Aggregate может содержать коллекцию ссылок Id на коллекцию Aggregates и как этого можно достичь с помощью Entity Framework?
Как правило, вы устанавливаете его с помощью свойств навигации и внешних клавиш.
public Class Foo
(
public List<Bar> Bars { get; set; }
)
Однако я хочу соответствовать DDD.
public Class Foo
(
public List<int> BarIds { get; set; }
)
То, что я не хочу иметь, - это совокупность Bar
, зная, что она имеет отношение к Foo
, на которую могут ссылаться многие другие агрегаты.
Возможно, это тот случай, когда у вас не может быть совокупности идентификаторов агрегатов в агрегате?