考虑以下对象模型(->> 表示集合):
客户->订单
订单->>OrderLineItems->产品{价格}
该应用程序专注于处理订单,因此在 UI 中使用显示所有符合特定条件的订单的大多数时间表。99% 的时间我只对显示 LineTotals 的总和感兴趣,而不是单个 LineTotals。
进一步考虑,每个订单也可能有多次付款(电汇、支票、信用卡等),同样,我只对我收到的金额感兴趣。
在查询数据库中的订单时,我不想选择所有订单,然后为每个订单选择其付款和 LineItems。
我的想法是将每个订单与“状态”对象相关联,缓存订单的所有总和和状态,以数量级提高查询性能,并支持未付订单、已付订单、到期订单等查询场景。
这可以防止域逻辑(例如,当订单被视为已付款时)泄漏到数据库查询中。但是,它有责任使总和保持最新。系统通常具有明确定义的需要发生的点,例如输入或集成支付、创建/修改订单。
到目前为止,我已经使用了 Observable Collections,它会在添加或删除项目或更新项目的某些属性时触发状态的重新计算。我问自己,从 ddd 的角度来看,所有这些的逻辑应该放在哪里。强制聚合根中的所有事件连接和计算逻辑对我来说似乎很奇怪。