domain-driven-design - DDD 性能问题 急切加载 AR 子实体

标签 domain-driven-design eager-loading

在过去的几天里,我正在制作一个示例应用程序来应用/学习 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/

相关文章:

domain-driven-design - 值对象是否应该包含输入参数的技术验证?

c# - 如何按照 TDD 方法更新 EF Core 2.0 拥有的实体?

laravel-4 - Laravel 4 Eager Loading 约束

node.js - 通过中间模型 Sequelize 急切加载

entity - DDD - ConcurrencySafeEntity 它的用途是什么

oop - 做领域模型时从哪里开始?

entity-framework - 可选包含 Entity Framework

c# - 使用 ThenInclude() 方法进行预加载的通用存储库?

mysql - 如果一个表有关系则加载它的多个关系

domain-driven-design - 我在哪里可以找到好的领域驱动设计资源?