我目前正在使用DDD工作很多,并且在从其他聚合根加载/操作聚合根时遇到问题.
对于我模型中的每个聚合根,我也有一个存储库.存储库负责处理根的持久性操作.
假设我有两个聚合根,包含一些成员(实体和值对象).
AggregateRoot1和AggregateRoot2.
AggregateRoot1有一个引用AggregateRoot2的实体成员.
此外,当我在AggregateRoot1中的实体与AggregateRoot2之间创建关联时,是应该通过实体还是通过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)
}
}
Run Code Online (Sandbox Code Playgroud)
这只是一个简单的例子,没有Demeter法或其他最佳原则/实践包括:-)
进一步评论赞赏.
domain-driven-design aggregate loading repository aggregateroot