AGGREGATE 聚合
每个AGGREGATE都有一个根(root),和一个边界(boundary)。边界定义了AGGREGATE内部都有什么,跟则是AGGREGATE所包含的一个特定Entity。对AGGREGATE而言,外部对象只可以引用根,而边界内部的对象之间则可以互相引用
固定规则,是指在数据变化时必须保持一致性规则,其涉及AGGREGATE成员之间的内部关系。而任何跨越AGGREGATE的规则将不要求每时每刻都保持最新状态。
此处联想到CAP:
CAP原则又称CAP定理,指的是在一个分布式系统中, Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),三者不可得兼。
一致性(C):在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
可用性(A):保证每个请求不管成功或者失败都有响应。
分区容忍性(P):系统中任意信息的丢失或失败不会影响系统的继续运作
对AGGREGATE操作,需要注意以下几点:
- 根ENTITY具有全局唯一标识,它最终负责检查固定规则。
- 边界内对 ENTITY具有本地标识,只在聚集内部才是唯一的
- 聚集外部对象不能 引用除聚集根 外 的任何内部对象。聚集根可以传递一个内部对象的副本VO传递出去,这样就不用担心内部对象被外部引用后产生变化。
- 只有聚集根才能通过数据库查询获取,所有其他对象必须通过遍历关联来发现 (存疑:这样效率很低吧)
- 聚集内部的对象可以保持对其他聚集根的引用
- 删除操作必须一次删除聚集内的所有对象
- 对聚集内的任何对象做修改时,整个聚集的所有固定规则都必须被满足
FACTORY
当客户端创建对象,如果客户端是应用层的一部分,那么指职责就会从领域层泄漏到应用层中。
创建聚集时要把它作为一个整体,并确保它满足固定规则。
所以需要一个独立的FACTORY来构建AGRGEGATE,把聚集根的引用传递出去。
这个FACTORY有些简单的情况下也可以使用构造函数,复杂的装配可以用FACTORY METHOD。
REPOSITORY
重建:使用已存储的数据创建实例的过程称为重建。
FACTORY负责制造新对象,REPOSITORY负责查找已有对象。
只为那些确实需要直接访问的AGGREGATE提供REPOSITORY,让客户始终聚焦于模型。
网友评论