Domain driven design 域模型对象中包含哪些内容,服务中包含哪些内容?

Domain driven design 域模型对象中包含哪些内容,服务中包含哪些内容?,domain-driven-design,Domain Driven Design,在一个领域驱动的设计中,您将使用一个非贫血的领域模型,您如何决定在您的领域对象和面向服务的方法中实现什么 编辑:我用一个例子用另一种方式问了这个问题,得到了更好的答案DDD的思想是域模型包含您的数据和大部分业务逻辑。服务通常处理这些结构的持久性 然后是中间的所有情况,其中业务流程由多个步骤组成,这些步骤总是更改/修改域对象。您通常使用服务来实现某些流程。因此,通常您使用服务的结果更新域对象。您永远不会让域对象实现自己调用服务 因此,常见的代码如下所示: if (order.isValidForP

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


编辑:我用一个例子用另一种方式问了这个问题,得到了更好的答案

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

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

因此,常见的代码如下所示:

if (order.isValidForPurchase() && orderValidatorService.isValidOrder( order))
    orderService.order( order)
这仅仅是因为order对象知道部分事实,而有些事实需要
orderValidatorService
知道的外部数据。可以说,这两行代码也可能在
orderService.order
方法中

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