[](
)特点
-
关心视图和对外的服务,Restful、页面渲染、websocket、XMPP 连接等
-
如果没有多种用户端接入方式,可以和应用层合并
-
对应到分布式系统中的网关、BFF、前台等概念
-
只产生接入异常,例如数据校验,对应 HTTP 状态码 400、415 等
-
一个应用可以有多个接入层
-
接入层做和业务规则无关的 bean validation 验证
-
准单体系统下,按照连接方式分包
该层指的是服务端用于适配端侧的部分,而非端侧本身。因为该层本就依赖应用层,无人使用接口在这里做依赖倒置,所有又被称作主动适配。
- assembler、dto 和 façade
[](
)facade
提供较粗粒度的调用接口,将用户请求委派给一个或多个应用服务进行处理。比如调用应用层创建用户的方法。
[](
)dto
数据传输的载体,内部不存在任何业务逻辑,可以通过DTO把内部的领域对象与外界隔离。
比如接收请求传入的数据CustomerDTO。
不同的对象在不同的层转换。用户接口层DTO和DO转换,应用层主要是DO,调外部微服务的服务的时候应用层有dto和do的转换。领域层与基础层之间,在基础层有DO和PO的转换。
在接口层定义DTO对象。数据可能来源于多个DO对象。
[](
)assembler
实现DTO与DO间的相互转换和数据交换。
一般assembler与dto一同出现。比如创建用户时,将CustomerDTO转换为CustomerEntity。你可以在用户接口层创建DTO类和assembler类。在assembler类里完成映射。
[](
)特点
-
关心处理完一个完整的业务
-
该层只负责业务编排,对象转换,实际业务逻辑由领域层完成
-
不关心【请求从何处来】,但是关心【谁来、做什么、有没有权限做】
即复制安全认证、权限校验
- 集成不同的领域服务解决问题
应用层位于领域层之上,因为领域层包含多个聚合,所以它可协调多个聚合服务和领域对象完成服务编排和组合,协作完成业务。
-
最终一致性(最终一致性对业务有侵入)事务放到这层
-
对应到分布式系统中的中台等概念
-
方法级别的功能权限控制放到这层
-
只产应用异常,对应 HTTP 状态码 403、401
-
准单体系统下,按照应用划分模块
主要包含应用服务,理论上不应有业务规则或逻辑,而主要是面向用例和流程相关的操作。
- 应用层也是微服务间的交互通道,它可调用其它微服务,完成微服务间的服务组合和编排。
开发设计时,不要将本该放在领域层的业务逻辑放到应用层。庞大的应用层会使领域模型失焦,时间一长,微服务就会退化为MVC。
应用服务是在应用层,