最近在看《领域驱动设计》这本书,准备写点学习笔记博文记录系列。记录本书中的要点和疑惑,不定期更新!先放张MarginNote的图:Aggregate每个Aggr
最近在看《领域驱动设计》这本书,准备写点学习笔记博文记录系列。记录本书中的要点和疑惑,不定期更新!先放张MarginNote的图:
Aggregate
每个Aggregate
都有一个根(Root
)和一个边界(boundary
)。边界定义了Aggregate
的内部都有什么,根则是Aggregate
中所包含的一个特定 Entity
。在Aggregate
中,根是唯一允许外部对象保持对它的引用的元素,而边界内部的对象之间则可以互相引用。除根以外的其他Entity
都有本地标识,但这些标识只有在 Aggregate
内部才需要加以区分,因为外部对象除了根Entity
外看不到其他对象。
PS: 在自己的项目中,好像都没看到Aggregate
?难道是我的Aggregate
用其他形式表现出来了?
下面是一个关于“汽车的轮胎和汽车之间的一个例子”
Aggregate的固定规则
建议:
将 Entity 和Value Object 分门别类放到Aggregate 中,并定义每个 Aggregate 的边界。在每个Aggregate 中,选择一个Entity 作为根,并通过根来控制对边界内其他对象的所有访问。只保持外部对象保持对根的引用。对内部成员的临时引用可以被传递出去,但仅在一次操作中有效。由于根控制访问,因此不能绕过它来修改对象。