是否有一种通用的 DDD 模式来处理域对象的欠载?

Is there a common DDD pattern to deal with under-loading of domain objects?

有时在处理应用程序时,尤其是在尝试遵循正确的 OOD 和 DDD 模式时,我们最终会得到领域 class,例如 Customer。然后我们有一些存储库可以加载这个对象,一切都很好很干净。

然后应用程序变得越来越复杂,我们开始优化性能。我们经常发现自己处于这样一种情况,我们并不真正需要加载,比如说,一个完整的 Customer 对象列表,而可能只是 ID 和名称,或者一小部分属性(例如在网格中显示)

我经常看到的解决方案包括:

  1. Under-loading 域对象,所以基本上我们仍然会使用 Customer class,但我们会使用单独的存储库方法加载那些,并且该存储库方法将从数据库中仅加载必填字段,并填充对象中的相应属性。剩余的 Customer 个字段将保持其默认值。这是一个简单的解决方案,但如果开发人员(或现有代码)希望加载某些属性,可能会导致许多错误。

  2. Purpose-classing 在这里我们创建 classes 例如 CustomerIdName, CustomerInfo , CustomerHeader 只包含我们需要的属性。这种方法可能会创建大量的 classes,但仔细 subclassing 是可行的。不过,它似乎脱离了无处不在的领域语言概念。

那么在 DDD 世界中是否有一些普遍接受的约定来处理这些问题?我尝试 google 这个,但找不到任何权威的东西。

或者这可能只是 classic DDD 方法的一个众所周知的限制,而 CQRS 或其他方法在这些情况下会更好?

你调查过 Entity Framework 了吗?他们有多个级别的实体延迟加载:MSDN Post

我认为第二种方法是可行的。 我们正在我们的项目中这样做,但仅适用于只读 DTO 类。我想只要您不将它们用于 insert/update 就好了。

还有 answer 您可能感兴趣的:

这是 DDD 的一个众所周知的限制,而 CQRS 是解决它的一个很好的方法。

读取端的 CQRS 基本上是解决方案 #2,带有所有必要的预防措施以避免将读取模型与可修改的域实体混淆:它们没有存储库,只读 类,等等

我不明白为什么加载不足会成为问题。您知道哪些字段无效,因此可以阻止 access/lazy 加载它们