复杂软件设计之道:领域驱动设计全面解析与实战
上QQ阅读APP看书,第一时间看更新

第3章 聚合设计

前面的章节讨论了如何将一个大的领域划分为不同的有界上下文,并通过有界上下文划分相应的团队。这些都是有界上下文的外部特征,包括使用统一语言命名上下文。本章主要是进入有界上下文内部讨论其结构。图3-1展示了聚合在整个DDD结构中的位置。

如果把有界上下文比喻为对土地进行划界,那么在划好界的土地上盖房子就类似于聚合;这些房子中有主要建筑和辅助建筑,是一群房子,而聚合也是一群对象,其中也有主从之分。建筑群与这块土地的关系类似于聚合与有界上下文的关系,聚合是一种领域模型,这种模型的意义取决于它所处的有界上下文,而有界上下文中逻辑一致性这样的核心概念也必须通过聚合等领域模型来体现,这是首要设计原则。

图3-1 聚合所处位置

如果说有界上下文解决了领域内的划分,那么聚合就解决了有界上下文内对象之间的划分。所谓划分就是将紧密的放一起,让松散的更加松散,甚至没有关系。从这里能看出DDD的一种收缩趋势,各领域分别向以聚合为核心的方向设计,如图3-2所示。

图3-2 有界上下文、聚合和领域的关系