6

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

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

4

1 回答 1

4

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

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

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

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

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

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

于 2009-01-09T17:13:40.750 回答