【问题标题】:CRUD in domain driven design领域驱动设计中的 CRUD
【发布时间】:2011-05-29 08:05:50
【问题描述】:

要在域驱动设计中执行 CRUD 操作,我是否需要为每个根聚合创建一个 域服务,该服务将具有 store 方法,该方法将调用 repository 接口,该接口在基础设施层。这是正确的方法吗。 如果我错了,请纠正我

【问题讨论】:

  • 在我看来,您不需要那个“域服务”,因为它只会将责任委托给存储库,而不是其他任何东西。为什么不直接调用存储库?

标签: domain-driven-design


【解决方案1】:

CRUD 不适用于域驱动设计。在领域驱动设计中,您使用领域的动词和名词。而不是“创建新订单”,您有一个“下订单”的用户聚合根。如果您的系统充满了 CRUD 操作,那么您并没有像应该使用的那样使用领域驱动设计,相反,您只是给原本简单的问题增加了复杂性。

管理屏幕是 CRUD 的理想选择。您有一些项目列表,其中添加或修改没有需要强制执行的业务(域)规则。它只是简单的“插入新行,修改该行,删除该行”。

订单处理系统更加复杂,并将开始受益于领域驱动设计。 “下订单”。 “支付订单”。 “下订单并完成付款后,开始发货流程”。这些具有需要在域中建模的复杂规则,因此,域驱动设计是一个很好的候选者。

【讨论】:

    【解决方案2】:

    我基本同意:

    存储库接口是模型层的一部分,并在基础设施层中实现。但请记住,存储库就像收集和存储完整的对象。它们不像持久层那样建模,因此不能存储聚合根的一部分。要构建复杂的聚合根,可以使用工厂。

    还请记住,有效的设计必须依赖于所使用的(持久性)技术。

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 2015-12-13
      • 2011-02-04
      • 2017-06-06
      • 2016-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      相关资源
      最近更新 更多