我有一些困难处理一个相当复杂的场景的最佳方法.我已经看到了很多类似的问题,但是没有人解决这个情况令我满意.
使用多个OrderLines(子实体)创建一个订单(聚合根).根据业务规则,每个OrderLine必须在订单的生命周期内保持相同的身份. OrderLines有许多(20)属性,并且可以在订单被视为“锁定”之前相当频繁地变异.另外还有一些必须在根层面执行的不变量;例如,每个订单行都有数量,订单的总数不能超过X.
在考虑对OrderLine的更改时,我不知道如何对这种情况进行建模.我有4个选择,我可以设想,但没有看起来令人满意:
1)当修改OrderLine的时候,请使用root提供的引用.但是我失去了在根中检查不变逻辑的能力.
var orderLine = order.GetOrderLine(id); orderLine.Quantity = 6;
2)在订单上调用方法.我可以应用所有不变的逻辑,但随后我被扩散的方法来修改OrderLine的许多属性:
order.UpdateOrderLineQuantity(id,6); order.UpdateOrderLineDescription(id,description); order.UpdateOrderLineProduct(id,product); ...
3)如果将OrderLine视为值对象,则可能会更容易,但是每个业务需求必须保持相同的身份.
4)我可以获取对OrderLines的引用,以便对不影响不变量的修改进行修改,然后通过Order命令.但是,如果不变量受大多数OrderLine属性影响呢?这个反对是假设的,因为只有几个属性可以影响不变量,但是随着我们发现更多的业务逻辑,这可能会改变.
任何建议都赞赏…不要犹豫,让我知道,如果我很密集.