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)
我不知道它会打破有界上下文的规则,虽然这些是不同类型的产品但在上下文中。
在 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”并不是完整聚合的良好候选者。