领域服务与应用服务的职责
我们知道,在领域设计中,划分为三种模型,分别为:实体(Entity)、值对象(Value Object)、和服务(Service)。其中Service与我们传统设计中的Service有什么不同呢?
让我们来回忆一下,通常我们针对将读写xml、资金转账等代码放在service中,可以看出,该层包括了两种含义,一种是与业务无关的,一种是与业务紧密关联的。领域驱动设计将这两层含义进一步划分,《Domain-Driven Design》中的例子那样:如果银行应用可以将我们的交易转化并输出电子表格文件,那么这种输出就应该是应用服务。而负责处理资金转帐的借贷关系,应该属于领域层,它包括了基本的业务逻辑,而技术层上的服务则根本没有任何业务含义。由此得知,将传统设计中的Service继续划分,得到应用服务与领域服务。领域层和应用层的服务是相互合作,由应用Service指挥领域对象来解决问题。
如此划分,可以使各层的结构和职责更加清晰,技术与业务进一步分离。
以上是我个人的理解,有不对之处还请指正。
另仔细阅读实战DDD(Domain-Driven Design领域驱动设计),在该文中说到:“在JiveJdon3中,com.jdon.jivejdon.service.ForumService和Forum实体模型及其值对象ForumState共同完成领域模型,其中ForumService属于应用服务层;而后两者属于领域层;其他服务ForumMessageService、AccountService和UploadService等都是此类性质。”在JiveJdon3中并没有对领域与应用Service进行明确的划分,而是由ForumService来完成。JJ3的代码我没有看过,只是从这段文字还这样判断的,有不对之处还请包含。请问,JJ3中是否对Service进行了划分?如果没有那么您是怎样考虑的呢?