DDD:程序应用服务的OOP替代方案是什么?

Lor*_*ill 2 c# oop domain-driven-design service-layer application-layer

我最近得到了Scott Miller和Nick Tune的一本关于领域驱动设计的模式,原理和实践.它在C#中有一些很好的例子,所以与我之前读过的其他DDD书籍有点不同.由于C#支持委托和事件,Domain事件实现非常简洁.

但是,有一件事让我担心,正如本书在应用服务一章中所说的那样,它应该是"程序式的,薄的".我知道应用程序层应该很薄,但为什么程序化?我不想写程序代码,或者我不会首先选择DDD.我还发现这个stackoverflow文章还标签Application Services是程序代码:

https://softwareengineering.stackexchange.com/questions/279369/conceptual-mismatch-between-ddd-application-services-and-rest-api

所以你看?应用程序服务是程序式的,而不是OOP.这让我想知道是否可以通过OO接口替换应用程序服务的过程接口来将设计改进为更多OO.本文建议方法对象可以,并且它有效吗?有哪些OO替代程序应用程序服务?谁能详细说明?

http://ayende.com/blog/2145/entities-services-and-what-goes-between-them

gui*_*e31 8

应用程序服务在该术语的编程范式意义上不是程序性的.这是一个对象,它封装了数据(引用其合作者对象)和行为-协调这些合作者的呼叫.

它可能在精神上看起来是程序性的,因为有一系列的行动,但是当有一个应用任务意味着许多步骤,例如:

  • 从存储库中获取域对象
  • 在该对象上调用方法
  • 保存对象

无论编程范例如何,你都无法摆脱程序性/顺序性.

例如,即使你正在使用面向对象的责任链模式,每个步骤都由链中的一个单独的actor执行,你仍然需要一个知道如何在右边组装链的"主"对象.顺序,因此根据定义知道程序,所以它是同样程序性的.