在许多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。但我没有其他想法:/
提前感谢任何建议。
答案 0 :(得分:0)
您不应该将实际对象实例引用从一个AR保存到另一个AR。任何实体引用都应该是暂时的。
您应该只存储标识符。
在您的情况下,您可以在相关的InvoiceLine条目中存储订单ID和OrderLine编号。它甚至可能是一个有价值的对象。
通过这种方式,当您从其存储库中获取Invoice AR时,您不会遇到任何对象检索问题。