是否有一种通用的 DDD 模式来处理域对象的欠载?
Is there a common DDD pattern to deal with under-loading of domain objects?
有时在处理应用程序时,尤其是在尝试遵循正确的 OOD 和 DDD 模式时,我们最终会得到领域 class,例如 Customer
。然后我们有一些存储库可以加载这个对象,一切都很好很干净。
然后应用程序变得越来越复杂,我们开始优化性能。我们经常发现自己处于这样一种情况,我们并不真正需要加载,比如说,一个完整的 Customer
对象列表,而可能只是 ID 和名称,或者一小部分属性(例如在网格中显示)
我经常看到的解决方案包括:
Under-loading 域对象,所以基本上我们仍然会使用 Customer
class,但我们会使用单独的存储库方法加载那些,并且该存储库方法将从数据库中仅加载必填字段,并填充对象中的相应属性。剩余的 Customer
个字段将保持其默认值。这是一个简单的解决方案,但如果开发人员(或现有代码)希望加载某些属性,可能会导致许多错误。
Purpose-classing 在这里我们创建 classes 例如 CustomerIdName
, CustomerInfo
, CustomerHeader
只包含我们需要的属性。这种方法可能会创建大量的 classes,但仔细 subclassing 是可行的。不过,它似乎脱离了无处不在的领域语言概念。
那么在 DDD 世界中是否有一些普遍接受的约定来处理这些问题?我尝试 google 这个,但找不到任何权威的东西。
或者这可能只是 classic DDD 方法的一个众所周知的限制,而 CQRS 或其他方法在这些情况下会更好?
有时在处理应用程序时,尤其是在尝试遵循正确的 OOD 和 DDD 模式时,我们最终会得到领域 class,例如 Customer
。然后我们有一些存储库可以加载这个对象,一切都很好很干净。
然后应用程序变得越来越复杂,我们开始优化性能。我们经常发现自己处于这样一种情况,我们并不真正需要加载,比如说,一个完整的 Customer
对象列表,而可能只是 ID 和名称,或者一小部分属性(例如在网格中显示)
我经常看到的解决方案包括:
Under-loading 域对象,所以基本上我们仍然会使用
Customer
class,但我们会使用单独的存储库方法加载那些,并且该存储库方法将从数据库中仅加载必填字段,并填充对象中的相应属性。剩余的Customer
个字段将保持其默认值。这是一个简单的解决方案,但如果开发人员(或现有代码)希望加载某些属性,可能会导致许多错误。Purpose-classing 在这里我们创建 classes 例如
CustomerIdName
,CustomerInfo
,CustomerHeader
只包含我们需要的属性。这种方法可能会创建大量的 classes,但仔细 subclassing 是可行的。不过,它似乎脱离了无处不在的领域语言概念。
那么在 DDD 世界中是否有一些普遍接受的约定来处理这些问题?我尝试 google 这个,但找不到任何权威的东西。
或者这可能只是 classic DDD 方法的一个众所周知的限制,而 CQRS 或其他方法在这些情况下会更好?