В настоящее время я много работаю с DDD и сталкиваюсь с проблемой при загрузке / работе с корнями агрегата из других корней агрегата.
Для каждого корня агрегата в моей модели у меня такжерепозиторий.Хранилище отвечает за обработку постоянных операций для корня.
Допустим, у меня есть два агрегатных корня с некоторыми членами (сущностями и объектами значений).
AggregateRoot1 и AggregateRoot2.
AggregateRoot1 имеет член сущности, который ссылается на AggregateRoot2.
- Когда я загружаю AggregateRoot1, должен ли я также загружать AggregateRoot2?
- Должно ли хранилище для AggregateRoot2 отвечать за это?
- Если так, можно лисущность в AggregateRoot1 для вызова хранилища AggregateRoot2 для загрузки?
Кроме того, когда я создаю связь между сущностью в AggregateRoot1 и AggregateRoot2, это должно быть сделано через сущность или через хранилище дляAggregateRoot2?
Надеюсь, мой вопрос имеет смысл.
[РЕДАКТИРОВАТЬ]
ТЕКУЩЕЕ РЕШЕНИЕ
Ссправка от Twith2Sugars Я пришел к следующему решению:
Как описано в вопросе, у совокупного корня могут быть дети, которые hAve ссылки на другие корни.При назначении 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)
}
}
Это простой пример, без законаДеметры или других лучших принципов / методов включены: -)
Дополнительные комментарии приветствуются.