特点
-
关心处理完一个完整的业务
-
该层只负责业务编排,对象转换,实际业务逻辑由领域层完成
-
不关心【请求从何处来】,但是关心【谁来、做什么、有没有权限做】
即复制安全认证、权限校验
- 集成不同的领域服务解决问题
应用层位于领域层之上,因为领域层包含多个聚合,所以它可协调多个聚合服务和领域对象完成服务编排和组合,协作完成业务。
-
最终一致性(最终一致性对业务有侵入)事务放到这层
-
对应到分布式系统中的中台等概念
-
方法级别的功能权限控制放到这层
-
只产应用异常,对应 HTTP 状态码 403、401
-
准单体系统下,按照应用划分模块
主要包含应用服务,理论上不应有业务规则或逻辑,而主要是面向用例和流程相关的操作。
- 应用层也是微服务间的交互通道,它可调用其它微服务,完成微服务间的服务组合和编排。
开发设计时,不要将本该放在领域层的业务逻辑放到应用层。庞大的应用层会使领域模型失焦,时间一长,微服务就会退化为MVC。
应用服务是在应用层,负责
-
服务的组合、编排、转发、转换和传递,处理业务用例的执行顺序以及结果的拼装,以粗粒度服务通过API网关发布到前端
-
发送或订阅领域事件
应用层代码目录结构
存放应用层服务组合和编排相关的代码。
应用服务向下基于
-
微服务内的领域服务,或
-
外部微服务的应用服务
完成服务的编排和组合
向上为用户接口层提供各种应用数据展现支持服务。
应用服务和事件等代码会放在这层目录。
Event(事件)
主要存放事件相关代码。包括两子目录:
publish
主要存放事件发布相关代码。比如发布用户创建事件给其它微服务。