COLA
1. 介绍
COLA 是 Clean Object-Oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”。COLA分为两个部分,COLA架构和COLA组件。是阿里巴巴实践的产物。
架构的意义 就是 要素结构:
- 要素 是 组成架构的重要元素;
- 结构 是 要素之间的关系。
而 应用架构的意义 就在于
- 定义一套良好的结构;
- 治理应用复杂度,降低系统熵值;
- 从随心所欲的混乱状态,走向井井有条的有序状态。
COLA V4结构图
层次 | 包名 | 功能 | 必选 |
---|---|---|---|
Adapter层 | web | 处理页面请求的Controller | 否 |
Adapter层 | wireless | 处理无线端的适配 | 否 |
Adapter层 | wap | 处理wap端的适配 | 否 |
App层 | executor | 处理request,包括command和query | 是 |
App层 | consumer | 处理外部message | 否 |
App层 | scheduler | 处理定时任务 | 否 |
Domain层 | model | 领域模型 | 否 |
Domain层 | ability | 领域能力,包括DomainService | 否 |
Domain层 | gateway | 领域网关,解耦利器 | 是 |
Infra层 | gatewayimpl | 网关实现 | 是 |
Infra层 | mapper | ibatis数据库映射 | 否 |
Infra层 | config | 配置信息 | 否 |
Client SDK | api | 服务对外透出的API | 是 |
Client SDK | dto | 服务对外的DTO | 是 |
以业务为核心,解耦外部依赖,分离业务复杂度和技术复杂度。
- Adapter 适配层:对前端展示的路由和适配。 VO:返回给前端的对象 assembler:将 responseDTO 转换为 VO web:处理页面请求的 Controller wap:处理手机端请求的 Controller
- Application 应用层:负责获取输入,组装上下文,调用领域层做业务流程编排,如果需要的话,发送消息通知等。若只是简单操作,应用层还可直接绕过领域层,访问基础层。避免在 Application 层做入参校验,可以通过 JSR303/380 和 Spring Validation 来前置校验。如何判断是否属于业务流程:不要有 if/else 分支逻辑,除非是 if 条件对象判空返回或者抛异常终止。 DTO:数据转换对象,只是为了和外部交互,所以本身不包含任何逻辑,属于贫血对象,包括 req 请求 DTO 和 res 响应 DTO converter:实现 dto 与 model 之间转换或 dto 与 po 之间转换 consumer:处理外部消息通知,比如 MQ 消息 executor:处理 request,包括 command 和 query 两种(一般可用 CmdExe 表示) scheduler:处理定时任务 rpc:实现 Client 中供外部调用的 Facade 接口,FacadeImpl
- Client:封装 sdk 供外部调用 api:供外部调用的 Facade 接口 DTO:供外部使用的接口对应的 DTO enums:枚举类
- Domain 领域层:封装核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Domain Entity)向 App 层提供业务逻辑计算和业务实体。领域是应用的核心,不依赖其他任何层次。 model:领域模型,包含数据和行为 gateway:领域网关,与外部解耦利器 ability:领域能力,包括 DomainService,当某个行为影响到多个 Entity 时,属于跨实体的业务逻辑,在这种情况下就需要 DomainService 来完成,即业务需要涉及到多个 gateway
- Infrastructure 基础实施层:处理技术细节,比如数据库 CRUD、搜索引擎、文件系统等,领域防腐的重任也落在这层,通过调用外部接口获取到的外部对象转换为实际 Domain 层所定义的对象模型,从而不直接使用外部对象。 PO:与数据库表一一映射关系,每个字段对应数据库表的一个 column,PO 只有数据,没有行为 factory:model 与 po 之间转换 mapper:数据库映射,持久化操作 common:工具包 gatewayImpl:网关实现
2. 使用
2.1. Archtype
COLA提供了两个archtype。位于cola-archetypes
目录下:
cola-archetype-service
:用来创建纯后端服务的archetype
。cola-archetype-web
:用来创建adapter
和后端服务一体的web
应用archetype
。
2.2. COLA组件
组件名称 | 功能 | 版本 | 依赖 |
---|---|---|---|
cola-component-dto |
定义了DTO 格式,包括分页 |
1.0.0 | 无 |
cola-component-exception |
定义了异常格式, 主要有BizException 和SysException |
1.0.0 | 无 |
cola-component-statemachine |
状态机组件 | 1.0.0 | 无 |
cola-component-domain-starter |
Spring 托管的领域实体组件 |
1.0.0 | 无 |
cola-component-catchlog-starter |
异常处理和日志组件 | 1.0.0 | exception 、dto 组件 |
cola-component-extension-starter |
扩展点组件 | 1.0.0 | 无 |
cola-component-test-container |
测试容器组件 | 1.0.0 | 无 |
2.3. 创建应用
mvn archetype:generate \
-DgroupId=com.alibaba.cola.demo.web \
-DartifactId=demo-web \
-Dversion=1.0.0-SNAPSHOT \
-Dpackage=com.alibaba.demo \
-DarchetypeArtifactId=cola-framework-archetype-web \
-DarchetypeGroupId=com.alibaba.cola \
-DarchetypeVersion=4.2.2
或者使用阿里云应用生成器。