知识卡片

领域层的包必须按聚合划分,绝不按设计要素类别划分

普通读书笔记卡 · 1978.aq

内容

编写领域层代码时,当前限界上下文的领域模型对象都定义在domain包里。进一步划分domain包时,千万不要按DDD设计要素类别划分——把领域服务、实体、值对象分门别类放在一起的做法是绝对错误的!包/模块划分应依据”变化的方向”,这才满足高内聚松耦合:按设计要素归类的类不是高内聚的,按聚合的归类才是高内聚的。因此应根据领域设计模型、按聚合对domain包划分,确定领域模型对象的命名空间(如candidate、course、learning、ticket正是设计建模识别出的聚合);每个聚合内的实体、值对象及其对应领域服务都定义在同一聚合内部。发散:”按 entity/valueobject/service 分包”是最常见的伪 DDD 结构——它把一起变化的东西拆散、把不相关的东西堆一起,恰恰违背了高内聚。

参考来源

- 位置:《解构领域驱动设计》第20章 20.3.4(源文件:_epub-src/OEBPS/033.xhtml) - 结论依据:原文强烈反对按设计要素分包、要求按聚合(变化方向)划分domain包以满足高内聚。 - 原始内容:千万不要按照领域驱动设计的设计要素类别进行划分——将领域服务、实体、值对象分门别类放在一起的做法是绝对错误的!