Tod*_*ith 6 domain-driven-design
在域驱动设计中,您需要一个非贫困域模型,您如何决定在域对象和面向服务的方法中实现什么?
编辑:我用一个例子以不同的方式问这个,并在这里得到更好的答案
DDD 的思想是领域模型包含您的数据和大部分业务逻辑。这些服务通常处理这些结构的持久性。
然后还有所有这些中间情况,其中业务流程由多个步骤组成,这些步骤总是会更改/修改域对象。您通常使用服务来实现某些流程。因此,通常您会使用服务的结果更新域对象。你永远不要让域对象实现自己调用服务!
所以很常见看到这样的代码:
if (order.isValidForPurchase() && orderValidatorService.isValidOrder( order))
orderService.order( order)
Run Code Online (Sandbox Code Playgroud)
原因很简单,因为订单对象知道部分事实,而有些则需要订单对象知道的外部数据orderValidatorService。可以说这两行代码也可以位于该orderService.order方法内部。
我认为研究这些过程中存在多少领域对象总是值得的;有时通过创建比您最初想象的更多的概念可以获得很多东西。它实际上是业务流程状态和对象模型的交集。通常 DDD 模型倾向于尝试从过于结构化的角度来捕获领域,在我看来,有点过于忽视核心流程了。因此,如果你过于结构化,我认为你会制造一个Order物体。如果您添加流程,也许您会制作ShoppingCartOrder、UnshippedOrder、ShippedOrder和。有时这也使您的服务集成变得更简单。BilledOrderHistoricalOrder