知识卡片

信息拥有者模式

普通读书笔记卡 · 1763.d

内容

当多个对象都需要某项数据时,优先让真正拥有该信息生命周期的对象负责维护,其他对象只引用或查询。这样能减少重复状态,也避免业务事实在多个聚合中互相打架。

参考来源

- 位置:《复杂软件设计之道》第3章《聚合设计》"3.3.1 信息拥有者模式"一节(源文件:_chapter_text/ch03.txt) - 结论依据:原文以订单聚合为例,说明订单条目需要"商品"这个概念,但不能跨界引用商品管理上下文的Product聚合根,而是"使用ProductId代表商品"(引用标识而非实体),并强调"聚合内的所有对象都是一致变化的……如果订单删除了,订单项目也应该没有了,那商品也应该删除吗?显然不是",说明谁真正拥有该信息的生命周期,谁才负责维护它。 - 原始内容:Product已经是商品管理上下文边界内的聚合根了,如果这里再次引用它,那么就跨越了有界上下文的边界,这是原则问题,不能让步……那么这里就使用ProductId代表商品……如果订单删除了,订单项目也应该没有了,那商品也应该删除吗?显然不是。收货地址也应该删除吗?显然不是。