您的域模型对象中包含哪些内容以及您的服务中包含哪些内容?

时间:2009-01-09 17:01:01

标签: domain-driven-design

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

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

1 个答案:

答案 0 :(得分:4)

DDD的想法是域模型包含您的数据和大多数业务逻辑。这些服务通常涉及这些结构的持久性。

然后就是所有这些中间案例,其中业务流程包含多个步骤,这些步骤总是会更改/修改域对象。您通常使用服务来实现某些过程。通常,您使用服务的结果更新域对象。你从不让域对象实现自己调用服务!

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

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

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

我认为调查这些过程中存在多个域对象总是值得的;有时可以通过制作比您最初想象的更多的概念来获得很多。它实际上是业务流程状态和对象模型的交集。通常DDD模型倾向于尝试从过度结构化的角度捕获域,IMO忽略了核心流程太多。因此,如果你过于结构化,我认为你制作了一个Order对象。如果您添加流程,则可以ShoppingCartOrderUnshippedOrderShippedOrderBilledOrderHistoricalOrder。这有时也使您的服务集成更简单。