DDD中的service的区别

本文介绍了领域驱动设计(DDD)中的三种Service——ApplicationService、DomainService和InfrastructureService。ApplicationService作为功能入口,连接表现层和领域层;InfrastructureService实现非业务功能,如日志记录;而DomainService则是存放业务逻辑的地方,尽管应尽量避免使用。在设计时,应先尝试在ApplicationService中直接操作DomainObject,若业务逻辑复杂,则考虑引入DomainService。总结来说,DDD中的Service分工明确,旨在保持代码的清晰和业务逻辑的纯粹。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,ddd中有三种service。分别是application service, domain service, infrastructure service。

①application service


首先从简单的开始讲。application service是应用程序的某个功能的入口(end point)。如果你使用的是分层架构,那它是位于presentation和domain之间。

②infrastructure service


infrastructure service实现不依赖于业务(domain)的功能。简单的例子来讲,比如打印日志(log),发送邮件(如果你的应用软件不是处理邮件问题的话)
infrastructure service位于最底层的infrastructure层。
 

③domain service


实现domain的service类。三种service中,唯一可以写业务逻辑的地方。
由于ddd提倡充血模型的缘故,我们在建模的时候要尽量避免制造domain service。尽量把业务逻辑放到其他的domain object中(比如entity, value object中)。
 

二,Service的比较

application service vs domain service

操作层面上如何处理application service和domain service呢?

首先application service既然是入口,在一个模块中,它必定是存在的。与之相反,domain service则不一定需要。
因此,再做类设计时可以先假定domain service不存在。直接写application service,在application service中对其他domain object进行操作。
理想情况下,application service存在的代码基本上就是它调用其他domain object的方法,具体的业务逻辑都会在domain object的方法中。所以当application service中出现if/else之类的语句,或者application service的一个方法变得很长时,我们就该警惕是不是把业务逻辑写到了application service中。这个时候我们该考虑是否需要重构,比如把逻辑放进domain object,或者增加一个domain service。

三,总结:ddd中把service类分成三种。


application service, domain service, infrastructure service。
domain service中可以写业务逻辑,但同时理想情况下我们尽量不实用domain service。
另外,我们要注意不要将业务逻辑写到application service中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值