DDD 性能问题急切加载 AR 子实体

JPP*_*JPP 2 domain-driven-design eager-loading

在过去的日子里,我正在制作一个示例应用程序来申请/学习 DDD。DDD 的原则之一(如果我错了,请纠正我)是对实体的所有更改都应该通过聚合根(AR)进行,并且 AR 应该加载他的子实体。这样更容易验证聚合一致性。只有一个小细节让我感到困扰。我无法理解 DDD 如何处理性能问题。想象一下,我有一个 Order(AR),比如说有 20000、30000 个 OrderLine。急切加载大量子记录时会存在性能问题。将订单说成 AR,您可以想象另一种可能发生这种情况的场景。我期待着阅读您对这个主题的看法。

eul*_*rfx 5

DDD 并非总是不受技术考虑的影响。如果您的 AR 可以包含大量子实体,请考虑是否可以让子实体独立成为 AR。必须在考虑最终一致性的同时做出此决定。

在您提供的示例中,首先考虑 Order AR 是否真的需要引用 OrderLine 实体以保持完整性。如果是这样,请考虑将 OrderLine 单独设为 AR,在这种情况下,您可能必须处理最终的一致性问题。当然,如果您将 OrderLine 设为 AR,您的应用程序逻辑将发生变化,因为需要在 OrderLine 上执行的操作将必须通过 OrderLineRepository 来访问 OrderLine,而不是通过 Order AR。

有关更多信息,请查看Vaughn Vernon 的 Effective Aggregate Design