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

标签 c# oop domain-driven-design ddd-repositories

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

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

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

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

  2. Purpose-classing 我们在其中创建类,例如 CustomerIdNameCustomerInfoCustomerHeader,其中包含只有我们需要的属性。这种方法可能会创建大量的类,但通过仔细的子类化是可行的。不过,它似乎脱离了无处不在的领域语言概念。

那么在 DDD 世界中是否有一些普遍接受的约定来处理这些问题?我试着用谷歌搜索这个,但没能找到任何权威的东西。

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

最佳答案

我认为第二种方法是要走的路。 我们正在我们的项目中这样做,但仅适用于只读 DTO 类。我想只要您不使用它们进行插入/更新就没问题。

还有那个answer你可能感兴趣:

关于c# - 是否有一种通用的 DDD 模式来处理域对象的欠载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955382/

相关文章:

c# - 为什么要使用多绑定(bind)转换器?

c++ - C++中如何比较两个对象的成员变量?

ruby - 命令设计模式的组合

c# - DDD 和依赖注入(inject)

database-design - 使用 Natural key 作为 DomainObject 的 ID 或 GUID + 自增域驱动设计

c# - 如何在 C# MVC 中调用扩展名为 .ashx 的 Web 服务?

围绕非托管 DLL 的 C# 包装器库要求在构建期间非托管 DLL 位于同一目录中

c# - 确定一个列表是否包含来自另一个列表的元素

C#:解决继承类与其基类之间的无效转换异常

nhibernate - 如何在 Fluent NHibernate 中建模此对象层次结构而不违反 DDD 原则?