https://mp.weixin.qq.com/s/jMWuMuIvI1cFThC-WQGbHQ
设计领域模型的一般步骤如下:
1.根据需求划分出初步的领域和限界上下文,以及上下文之间的关系;
2.进一步分析每个上下文内部,识别出哪些是实体,哪些是值对象;
3.对实体、值对象进行关联和聚合,划分出聚合的范畴和聚合根;
4.为聚合根设计仓储,并思考实体或值对象的创建方式;
在工程中实践领域模型,并在实践中检验模型的合理性,倒推模型中不足的地方并重构。
如何创建好的聚合?
边界内的内容具有一致性:在一个事务中只修改一个聚合实例。如果你发现边界内很难接受强一致,不管是出于性能或产品需求的考虑,应该考虑剥离出独立的聚合,采用最终一致的方式。
设计小聚合:大部分的聚合都可以只包含根实体,而无需包含其他实体。即使一定要包含,可以考虑将其创建为值对象。
通过唯一标识来引用其他聚合或实体:当存在对象之间的关联时,建议引用其唯一标识而非引用其整体对象。如果是外部上下文中的实体,引用其唯一标识或将需要的属性构造值对象。
如果聚合创建复杂,推荐使用工厂方法来屏蔽内部复杂的创建逻辑。
Cache Aside Pattern ??
上文中,我们将领域行为封装到领域对象中,将资源管理行为封装到资源库中,将外部上下文的交互行为封装到防腐层中。此时,我们再回过头来看领域服务时,能够发现领域服务本身所承载的职责也就更加清晰了,即就是通过串联领域对象、资源库和防腐层等一系列领域内的对象的行为,对其他上下文提供交互的接口。