欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送!
在我后台回复 「资料」 可领取
编程高频电子书
!
在我后台回复「面试」可领取硬核面试笔记
!文章导读地址:点击查看文章导读!
感谢你的关注!
基于电商履约场景的 DDD 实战
阿里巴巴开源的 Cola 架构设计
Alibaba 开源了 Cola 架构,目前发展到了 Cola 4.0,Cola 的思想与 DDD 建模设计有一些相通之处,但并不是完全一样,
Cola 架构不仅提供了建模思想,而且提供了可落地的工具和实践指导
Cola 架构的具体内容,可以在 CSDN 上详细看张建飞大佬写的文章!这里我主要将核心部分给写下来!
应用架构的本质就是将类与类、包与包之间的组织关系变得更加清晰,易于维护,达到高内聚、低耦合!
好的应用架构都遵循着一个规律:以业务为中心进行建模
Cola 架构的层次划分为:Adapter 层、Application 层、Domain 层、Infrastructure 层
1、适配层(Adapter Layer):负责与外界进行交互
2、应用层(Application Layer):负责获取输入,组装上下文,调用领域层进行业务处理,也可以直接访问基础设施层
3、领域层(Domain Layer):封装了核心业务逻辑,为 App 层提供业务实体以及业务逻辑计算
4、基础设施层(Infrastructure Layer):负责技术细节问题的处理,如数据库的 CRUD、RPC、搜索引擎等
分层是大粒度的职责划分,接下来还要更细粒度的进行包结构的划分,才能具体的指导代码结构
- Adapter 层:
- web 负责处理 Controller
- wireless 负责处理无线端的适配
- wap 负责处理 wap 端的适配
- App 层
- executor 负责处理 request
- consumer 负责处理外部 message
- scheduler 负责处理定时任务
- Domain 层
- model 领域模型
- ability 领域能力,包括 DomainService
- gateway 领域网关,用于解耦
- Infrastructure 层
- gatewayimpl 网关的实现
- mapper 数据库映射
- config 配置信息
- Client SDK
- api 服务对外提供的 API
- dto 服务对外的 DTO
DDD 对设计能力要求很高,设计的好不好,要看以下三点:
- 有没有帮助系统解耦
- 有没有提高业务语义表达能力
- 有没有提高系统的可维护性和可观测性
Cola 代码架构
接下来我们先去 COLA 源码仓库把代码下载下来,分析一下 COLA 架构如何设计,之后再去完成电商履约场景的代码设计
整个 Cola 架构如下图,包括了 5 个部分:
接下来说一下 Web 请求的整个调用流程:
- Web 请求的入口就是 adapter 层的 Controller,在 Controller 中,接收命令参数(Query、Command),并且调用 Service 服务来进行处理
- Service 接口在 client 层,Service 实现类在 app 层,因此最终是走到 app 层进行业务逻辑的处理
- 在 app 的 Service 实现类中,会调用 Executor(app 层) 来对 Command 进行处理,在 Executor 中通过 Mapper(infra 层) 来操作数据库,通过数据库查询出来的对象是 DO(infra 层),将 DO 转换为 CO(client 层)进行返回
更复杂一些的逻辑流程
上边说了一个简单逻辑的流程
接下来说一下稍微复杂一些的保存操作,如果在保存之后,还需要发布一个事件,那就需要使用 Gateway 来进行解耦操作,将保存数据的操作和发布事件的操作给提取到 Gateway 中去,那么 Executor 就只需要调用 Gateway 的保存方法即可,数据库的操作以及事件的发布全部交给 GatewayImpl 来做如下:
至此,Cola 架构整体的一个流程就梳理完毕了,还有一些细节地方没有说,比如 Convertor,这个就相当于 DDD 中的防腐层,用于将外部对象转为内部对象,比如将 web 端发来的 DTO 对象转为内部的 DO 对象等等
这些细节的东西会在接下来的实战环节说明