《实现领域驱动设计》拆书稿 第7章 领域服务
2020-06-17 本文已影响0人
wiwisir
image.png
拆书稿
一、什么是领域服务(首先,什么不是领域服务)
领域服务和应用服务的区别
应用服务:
不会处理业务逻辑,它负责编排和转发,它将要实现的功能委托给一个或多个领域对象来实现,它本身只负责处理业务用例的执行顺序以及结果的拼装。
领域服务:
是用来协调领域对象完成某个操作,用来处理业务逻辑的,它本身是一个行为,所以是无状态的。状态由领域对象(具有状态和行为)保存。
应用服务是领域服务的客户方;
什么操作不属于实体或者值对象,什么情况下我们可以使用领域服务:
- 执行一个显著的业务操作过程
- 对领域对象进行转换
- 以多个领域对象作为输入进行计算,结果产生一个值对象
读后思考
1、什么是服务?
服务是行为的抽象
- 应用服务属于应用层,用来表述应用行为;
- 领域服务属于领域层,用来表述领域行为;
- 应用层(Application):负责展现层与领域层之间的协调,协调业务对象来执行特定的应用程序任务。它不包含业务逻辑。
- 领域层(Domain):负责表达业务概念,业务状态信息以及业务规则,是业务软件的核心
2、什么是应用服务?
- 应用服务是用来表达用例和用户故事(User Story)的主要手段。
- 应用层通过应用服务接口来暴露系统的全部功能。在应用服务的实现中,它负责编排和转发,它将要实现的功能委托给一个或多个领域对象来实现,它本身只负责处理业务用例的执行顺序以及结果的拼装。通过这样一种方式,它隐藏了领域层的复杂性及其内部实现机制。
- 应用层相对来说是较“薄”的一层,除了定义应用服务之外,在该层我们可以进行安全认证,权限校验,持久化事务控制,或者向其他系统发生基于事件的消息通知,另外还可以用于创建邮件以发送给客户等。
- 应用层作为展现层与领域层的桥梁。展现层使用VO(视图模型)进行界面展示,与应用层通过DTO(数据传输对象)进行数据交互,从而达到展现层与DO(领域对象)解耦的目的。
3、什么是领域服务?
领域层就是较“胖”的一层,因为它实现了全部业务逻辑并且通过各种校验手段保证业务正确性。而什么是业务逻辑呢?业务流程、业务策略、业务规则、完整性约束等。