DDD,是否可以在有界上下文中让多个聚合根共享相同的身份

b.b*_*ben 2 domain-driven-design aggregateroot bounded-contexts

在有界上下文中可以有许多这样的聚合根吗

Product
   ProductID : GUID
   Name : string
   Price : float

ProductPromotion
   ProductID : GUID
   Discounted : float

ProductShortName
   ProductID : GUID
   ShortName : string
Run Code Online (Sandbox Code Playgroud)

我不知道它会打破有界上下文的规则,虽然这些是不同类型的产品但在上下文中。

链接到我的实际问题

Ped*_*oes 6

在 DDD 场景中,每个聚合根都应该有自己唯一的 ID,而这似乎是缺失的(如果我正确理解了您的场景,似乎您希望所有 3 个类都是根)。所以,如果你的设计是这样的:

Product <ROOT>
   ProductID : GUID
   Name : string
   Price : float

ProductPromotion <ROOT>
   PromotionID: GUID
   ProductID : GUID
   Discounted : float

ProductShortName <ROOT>
   NameID: GUID
   ProductID : GUID
   ShortName : string
Run Code Online (Sandbox Code Playgroud)

就其本身而言,这种设计不会损害聚合或有界上下文原则。应该允许一个聚合持有对另一个聚合根的 id 的引用(如无数的购物车示例,其中 LineItem 持有对 ProductID 的引用)。

你不应该做的(看起来你不是)是在另一个内部保存对整个聚合的完整引用。

但是,在设计聚合时,您应该始终反思自己的目标是什么。是的,它们应该很小,但它们也必须传达一个目标。通常,它们旨在强制执行某些不变量,而这些示例似乎并未实现该目标。

也许你的例子对于这个问题过于简化了,我无法真正评估它,但在我看来,“ProductPromotion”和“ProductShortName”并不是完整聚合的良好候选者。