Domain driven design 如何引用来自不同根的叶?

Domain driven design 如何引用来自不同根的叶?,domain-driven-design,aggregateroot,Domain Driven Design,Aggregateroot,我有这样的设计: 一个产品有许多定价网格,一个网格有许多定价周期 Product Id Name Grids[] Name Periods[] Price Start End 现在我有特别优惠,当卖家创建一个优惠(例如-10%)时,他可以选择将其应用于产品甚至网格(例如,他不想将优惠应用于网格“www.apartnerwebsite.com”,但他更喜欢将其应用于网格“我的网站”) 但我不能这样做,因为没有网格ID,也不能引用根聚合中的叶。在我看来,网格是自己的

我有这样的设计:

一个产品有许多定价网格,一个网格有许多定价周期

Product
 Id
 Name
 Grids[]
  Name
  Periods[]
   Price
   Start
   End
现在我有特别优惠,当卖家创建一个优惠(例如-10%)时,他可以选择将其应用于产品甚至网格(例如,他不想将优惠应用于网格“www.apartnerwebsite.com”,但他更喜欢将其应用于网格“我的网站”)


但我不能这样做,因为没有网格ID,也不能引用根聚合中的叶。

在我看来,网格是自己的聚合根的竞争者。如果网格和产品一样构成报价的一部分,那么将其作为聚合根对我来说是有意义的。产品和报价将根据ID引用其网格


正如我在评论中提到的,您不应该害怕有大量的小聚合。这实际上是一件积极的事情,正如Vernon在他的优秀文章中所述:

您是否考虑过将“网格”作为聚合根?然后让产品和产品都参考网格的ID?这不只是一个解决办法吗?网格本身并不存在,对吗?我已经考虑过了,但从长远来看,我只会有聚合根,这让我感到害怕。我不知道你的全部要求,但设计小型聚合不是一个解决办法。阅读这些关于这个主题的优秀文章(第一篇是最相关的):。如果网格是报价的一部分,也是产品的一部分,那么对我来说,将其作为自己的聚合是有意义的。谢谢,我会看看你的文章。有没有什么技术/工具可以轻松地将叶子迁移到聚合根中?我不知道。。但引用埃文斯先生的话,这是一个正常的“深入了解”过程。不用担心。这是我读过的关于聚合设计的最好的东西。
Offer
 OfferId
 OfferName
 ProductIds[]
 GridIds[] //??