- 战术设计的各个模块是的协作关系
- 哪些是问题空间问题,哪些是方案空间问题边界没有划分清楚。
- 实体和聚合根的区别理解不不深刻,实体和聚合根建模的方法不对。
以上问题将会在下文解释清楚。
战术设计拆解
DDD的战术设计即设计某个子域的领域模型以及代码落地。领域事件、领域对象、聚合根、实体、值对象、领域服务、工厂、资源库等这些概念都属于这个范畴。
笔者将这些概念重新分层组装了下,如下图所示。
首先将整体分成两部分,问题空间和方案空间。
- 问题空间即领域建模。是对业务问题的描述,以及我们如何对这些问题进行抽象。这些是需要在业务、产品、开发都必须达成一致的,与具体的技术方案无关。
- 方案空间即如何用技术手段来解决问题,与具体技术的实现有关。
问题空间即领域建模,是通过实体、值对象、领域服务、领域事件来表达。
-
实体和值对象是模型对象,实体是重中之重,包括核心模型数据、行为、状态。之所以要区分实体和值对象,是为了降低复杂度,因为值对象是个常数对象,不需要花太多精力。
注意某个对象在某个领域内是个值对象,在另外的领域可能是个实体,所以脱离领域上下文,说某个对象是值对象,肯定是不对的,比如大家常说的地址是个值对象,这一定是对的吗? -
领域事件即实体产生的事件
-
领域服务包括一些逻辑的计