【问题标题】:What goes in your domain model objects and what goes in your services?您的域模型对象中包含什么以及您的服务中包含什么?
【发布时间】:2009-01-09 17:01:01
【问题描述】:

在一个领域驱动的设计中,您要使用非贫血领域模型,您如何决定在您的领域对象和面向服务的方法中实现什么?

编辑:我用一个不同的方式问了这个例子,得到了更好的答案here

【问题讨论】:

    标签: domain-driven-design


    【解决方案1】:

    DDD 的理念是域模型包含您的数据和大部分业务逻辑。服务通常处理这些结构的持久性。

    还有所有介于两者之间的情况,即业务流程由多个步骤组成,这些步骤总是会更改/修改域对象。您通常使用服务来实现某些过程。因此,通常您会使用服务的结果更新域对象。你永远不要让领域对象实现自己调用服务!

    所以看到这样的代码是很常见的:

    if (order.isValidForPurchase() && orderValidatorService.isValidOrder( order))
        orderService.order( order)
    

    仅仅是因为订单对象知道部分真相,而有些则需要orderValidatorService 知道的外部数据。可以说这两行代码也可以在orderService.order 方法中。

    我认为研究这些过程中存在多少领域对象总是值得的;有时通过提出比您最初想象的更多的概念可以获得很多。它实际上是业务流程状态和对象模型的交集。通常 DDD 模型倾向于尝试从过于结构化的视图中捕获领域,IMO 忽略了核心流程有点过分。因此,如果您过于结构化,我认为您制作了一个 Order 对象。如果您添加进程,您可能会创建ShoppingCartOrderUnshippedOrderShippedOrderBilledOrderHistoricalOrder。这有时也会使您的服务集成更简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-23
      • 2012-03-15
      • 1970-01-01
      • 1970-01-01
      • 2013-05-01
      • 2014-10-10
      • 1970-01-01
      • 2013-07-18
      相关资源
      最近更新 更多