知识卡片

双聚合根取舍

普通读书笔记卡 · 1764.f

内容

当一个模型同时承担内部管理和对外交互两类职责时,单一聚合根可能被迫膨胀。双聚合根违背直觉,但能按职责拆分变化压力,代价是后续协作规则必须更明确。

参考来源

- 位置:《复杂软件设计之道》第4章《实体和值对象》"4.7.5 双聚合根"一节(源文件:_chapter_text/ch04.txt) - 结论依据:原文以JiveJdon论坛系统ForumThread和ForumMessage的迭代过程说明"ForumThread如同Car,Car作为一个整体概念是一个聚合根,而发动机作为Car的部件,也是其聚合根",最终"后来笔者突然豁然开朗,ForumThread应该也是一个聚合根,ForumMessage和ForumThread是两个聚合根",且这一认识是经过反复调试并发/生命周期Bug后才确立的,代价明显。 - 原始内容:在JiveJdon的不断完善和发展过程中,走过很多弯路,其中最大的错误是将ForumThread作为聚合根,后来在代码迭代中发现ForumMessage也应该作为聚合根。为什么ForumThread和ForumMessage都是聚合根呢?ForumThread如同Car,Car作为一个整体概念是一个聚合根,而发动机作为Car的部件,也是其聚合根……后来笔者突然豁然开朗,ForumThread应该也是一个聚合根,ForumMessage和ForumThread是两个聚合根,这样的设计也是经过一段弯路才领悟的。