领域驱动设计-聚合模式
几种广泛使用的基本元素
- 实体
具有持久化ID的对象。 - 值对象
作为值集合的对象。例子:Money对象,由币种、金额组成。 - 工厂
负责实现创建对象逻辑的对象或方法。 - 存储库
用来访问持久化实体的对象。 - 服务
实现不属于实体或值对象的业务逻辑的对象。
聚合
聚合是一个边界内的领域对象的集群,可以将其视为一个单元。它由根实体和可能的一个或多个其他实体和值对象组成。
模式:聚合
将领域模型组织为聚合的集合,每个聚合都是可以作为一个单元进行处理的一组对象构成的图
聚合规则(点餐系统)
点餐系统有很多概念,这里只拿简单的,订单、餐厅、用户,来描述一下规则
- 只引用聚合根
餐厅只引用订单。
用户对于餐厅,只是订单中的内容
订单引用餐厅,用户。
作为关联餐厅、用户,记录各自主键,如有必要,做数据冗余
用户只引用订单。
餐厅对于用户,只是订单中的内容信息。
- 只引用聚合根
- 聚合间引用使用主键
餐厅只引用订单主键信息。
订单只引用,餐厅、用户信息。
比较特殊的是,对于历史订单,可能需要做其他的数据冗余。因为用户地址信息,餐厅信息可能会变化。
用户只引用订单主键信息。
- 聚合间引用使用主键
- 在一个事务中,只创建、编辑、删除一个聚合
在一个事务中,只对餐厅、订单、用户,其中之一的信息做改动。
反例:
更新用户信息,并修改用户订单信息。
本身这个操作,就是两个操作。
- 在一个事务中,只创建、编辑、删除一个聚合
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。