在过去的几天里,我正在制作一个示例应用程序来应用/学习 DDD。 DDD 的原则之一(如果我错了请纠正我)是对实体的所有更改都应该通过聚合根(AR)进行,并且 AR 应该加载他的子实体。通过这种方式可以更轻松地验证聚合一致性。 只有一个小细节困扰着我。我无法理解 DDD 如何处理性能问题。假设我有一个订单 (AR),其中有 20000、30000 个 OrderLine。急切加载大量子记录会存在性能问题。将 Order 称为 AR,您可以想象另一种可能发生这种情况的场景。 我期待着阅读您对这个主题的看法。
最佳答案
DDD 并不总是不受技术考虑的影响。如果您的 AR 可以包含大量子实体,请考虑是否可以根据自己的权限创建子实体 AR。必须在考虑最终一致性的情况下做出此决定。
在您提供的示例中,请考虑 Order AR 是否确实需要首先引用 OrderLine 实体以保持完整性。如果是这样,请考虑将 OrderLine 单独作为 AR,在这种情况下,您可能必须处理最终一致性。当然,如果你把OrderLine做成AR,你的应用逻辑就会改变,因为需要在OrderLine上执行的操作将不得不通过OrderLineRepository来访问OrderLine,而不是通过Order AR。
有关此内容的更多信息,请查看 Effective Aggregate Design by Vaughn Vernon 。
关于domain-driven-design - DDD 性能问题 急切加载 AR 子实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12179348/