如何避免在另一个非root-aggregate中保持对非root-aggregate的引用?

时间:2013-06-04 14:31:28

标签: domain-driven-design aggregation

在许多ddd示例中,我们有一个简单的:

订单(聚合根[AR]) 和 OrderLine(聚合成员[AM])

+

发票(聚合根[AR]) 和 InvoiceLine(聚合成员[AM])

在这个例子中,我们在订单上发出发票,因此它是从一个AR(发票)到另一个(订单)的直接引用,这显然是正确的。

然而,就我而言,情况更为复杂:

我们对来自不同订单的许多OrderLines发出发票。

所以在一张发票上,我们有: InvoiceLine#1引用订单#1中的OrderLine#1, 另一个InvoiceLine#2引用OrderLine#2(来自另一个订单#2)

并且,例如,没有InvoiceLine引用订单#1中的OrderLine#2。

如何解决这个案子?

似乎我们必须在InvoiceLine中保留对OrderLine的引用,这是不正确的,afaik。但我没有其他想法:/

提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

您不应该将实际对象实例引用从一个AR保存到另一个AR。任何实体引用都应该是暂时的。

您应该只存储标识符。

在您的情况下,您可以在相关的InvoiceLine条目中存储订单ID和OrderLine编号。它甚至可能是一个有价值的对象。

通过这种方式,当您从其存储库中获取Invoice AR时,您不会遇到任何对象检索问题。