В настоящее время я много работаю с DDD, и я столкнулся с проблемой при загрузке/работе с помощью Aggregate корней из других корней совокупности.
Foreach Совокупный корень в моей модели, у меня также есть репозиторий. Теперь репозиторий отвечает за обработку операций с постоянным доступом для корня.
Предположим, что у меня есть два Aggregate Roots, с некоторыми членами (объектами и объектами Value).
AggregateRoot1 и AggregateRoot2
AggregateRoot1 имеет член сущности, который ссылается на AggregateRoot2
- Когда я загружаю AggregateRoot1, должен ли я также загружать aggregateRoot2?
- Это репозиторий для aggregateRoot2, который должен нести ответственность за это.
- Это так, нормально ли сущность в aggregateRoot1 вызывать репозиторий aggregateRoot2 для загрузки?
Кроме того, когда я создаю связь между объектом в AggregateRoot1 с AggregateRoot2, это должно быть сделано через объект или через репозиторий для aggregateRoot2.
Надеюсь, мой вопрос имеет смысл.
[EDIT]
ТЕКУЩЕЕ РЕШЕНИЕ
С помощью Twith2Sugars я придумал следующее решение:
Как описано в вопросе, "совокупный корень может иметь детей, которые имеют ссылки на другие корни. При назначении root2 одному из членов root1 репозиторий для root1 будет отвечать за обнаружение этого изменения и делегировать его в репозиторий для root2.
public void SomeMethod()
{
AggregateRoot1 root1 = AggregateRoot1Repository.GetById("someIdentification");
root1.EntityMember1.AggregateRoot2 = new AggregateRoot2();
AggregateRoot1Repository.Update(root1);
}
public class AggregateRoot1Repository
{
public static void Update(AggregateRoot1 root1)
{
//Implement some mechanism to detect changes to referenced roots
AggregateRoot2Repository.HandleReference(root1.EntityMember1, root1.EntityMember1.AggregateRoot2)
}
}
Это просто простой пример: ни один закон Деметры или другие лучшие принципы/практики не включали: -)
Другие комментарии оценены