DDD:有多少聚合应该有一个单一的有界上下文?

DDD: How many aggregates should have a single bounded context?

多少聚合应该有一个单一的限界上下文?

我问这个问题是因为书籍和其他资源中的信息太broad/abstract。

我想,这取决于特定的领域模型及其结构。有多少限界上下文有领域模型?每个有界上下文中有多少个实体。我想,所有这些问题都依赖于这个事实,即在一个有界上下文中应该有多少聚合。

此外,如果回顾一下 SOLID 原则和拥有小的松散耦合代码片段的共同想法。我想,每个有界上下文最多有 3-4 个聚合是可以的。如果单个限界上下文中有更多聚合,则可能是软件设计存在一些问题。

我现在正在阅读 Vernon 的有关 DDD 的书,但要理解如何设计这些东西相当困难。

How many aggregates should have a single bounded context?

所有聚合都应该有一个有界上下文。您几乎可以逆向计算——聚合将存储在单个数据库中,数据库将属于单个(微)服务,服务将服务于单个有界上下文;因此,聚合将属于单个有界上下文。

事情可能变得混乱的地方:很容易采用一些广泛的业务概念,例如 "order",并尝试为适用于每个有界上下文的顺序创建单一表示。但这不是目标 - 目标是让每个上下文都有一个在该上下文中工作的顺序表示。

常见示例:销售、计费、履行可能都关心 "order",但他们需要共享的信息主要只是订单 ID,它充当相关标识符,以便他们可以协调对话.

参见 Mauro Servienti:All of Our Aggregates Are Wrong

老生常谈的答案是“够了,但不要太多”。对于在有界上下文中放置多少聚合没有真正的指导。

驱动聚合和实体的是用于描述上下文的通用语言。 Ubiquitous Language 因语境不同而不同,语境中需要的实体和聚合词根可以在该语言使用的名词中找到。一旦你有了语言完整描述的领域,计算在该语言中具有特殊含义的名词,你就有必要的实体数。

不过请记住,我很少遇到 "fully described" 这样的限界上下文。目标是 "described fully enough for this release"。因此,对于任何版本,实体数量都不会是 "enough",您可能会计划添加更多实体。这些计划是否排在优先队列的首位是另一个问题。