其中对应层的功能介绍如下:
接口层(Interfaces):该层包含与其他系统交互的所有内容,如Web服务器、RESTful接口。接口层处理传入数据的解释、校验、编解码、序列化操作,同时可以考虑引入专门的DTO(数据转换对象)来协助数据转换;
应用层(Application):该层负责驱动应用程序完成工作流程。很薄一层,协调多个领域对象(实体、聚合根、领域服务)实现服务编排和组合完成工作流,该层通常不应该包含具体业务逻辑。该层涉及:其他微服务RPC调用、微服务编排和组合、分布式事务实现、消息驱动事件的驱动、日志记录等。
领域层(Domain):该层是软件的核心,包含业务逻辑具体实现,包含实体、值对象、聚合、领域服务、仓储接口等领域对象内容,通常该层应该配备图示告知软件是如何工作的;
基础层(Infrastructure):包含网关、缓存、数据库存储、消息中间件、监控、应用程序服务等通用的技术和基础服务。基础层以不同方式支持到其他三层,促进各层间通信。配置文件、数据库Schema模式定义以及仓储接口实现都是基础结构的一部分;
DDD分层架构传统三层架构的比较DDD四层架构也基于传统三层架构的,看一下它们之间的对照关系:
DDD四层架构和传统三层架构有以下区别:
- 关注点不一样:三层架构关注请求调用顺序;DDD架构关注领域服务。
- 横向划分方式不一样:三层架构主要关注纵向划分,对横向划分没有约定;DDD架构更关注纵向,即:多个领域层之间划分及交互方式。
- 对资源的定位不一样:三层架构把所有依赖的数据都放到数据访问层;DDD架构只将领域相关联的数据放到Repository中,其他比如API层缓存、文件等都当成基础服务来处理。
关于DDD架构分层还有整洁架构和六边形架构两种形式,这里就不再拓展,感兴趣的朋友可自行查找相关资料进行学习。
小结本篇文章为大家讲解了市面上常见的架构分层。分层架构的目的是通过关注点分离来降低系统的复杂度,同时满足单一职责、高内聚、低耦合、提高可复用性和降低维护成本。但分层架构同样也有一定的缺点,比如开发成本高、性能略低、可扩展性低等问题。实践中,可根据需要选择合适的分层架构。