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