跳转到内容

COLA 分层与扩展点

用途:在 Java 企业项目里找一套可直接落地的分层骨架时查阅

COLA(Clean Object-oriented and Layered Architecture)是阿里开源的应用架构规范,把 DDD 的战术建模与常见分层固化成模块结构与组件约定,目标是让团队“照抄骨架”就能获得一致的依赖方向与职责划分。

四个标准模块:

模块 职责 典型内容
adapter 协议适配与入口 Controller、RPC 服务实现、消息消费者、定时任务入口
app 应用层 用例服务(Executor/Command)、参数校验、编排、事件发布
domain 领域层 实体、值对象、领域服务、网关接口(对外部能力的抽象)、领域事件
infrastructure 基础设施层 网关实现、Mapper/Repository 实现、DO 与转换、缓存与消息适配

另有 client(对外 API 与 DTO 定义)与 model(共享枚举常量)作为辅助模块。

  1. 扩展点(Extension Point):以“业务身份(bizId / useCase / scenario)“为维度选择实现,用于同一套流程承载多业务变体(不同租户、不同渠道、不同商品类型走不同规则)。
  2. 能力(Ability):把可复用的领域能力显式建模,供多个用例调用。
  3. DTO 转换约定:client 定义对外契约,adapter 负责协议转换,app 处理用例,避免 DO 外泄。

扩展点机制的价值在于用配置化的路由替代 if-else 堆叠;代价是流程被拆散,读一条完整链路需要理解路由规则。

风格 与 COLA 的关系
DDD 四层 COLA 的四模块基本对应,且给出目录与命名约定
六边形 COLA 的“网关接口在 domain、实现在 infrastructure”即端口/适配器
TMF/业务中台类框架 同属“业务身份 + 扩展点”思路,COLA 更轻量、开源可读

适合:多团队协作、需要统一工程结构的中大型 Java 业务系统;存在多业务变体(渠道/租户/品类差异规则)。

不适合:非 Java 技术栈(思想可借鉴但组件无现成实现);极简单服务(四模块会拖慢交付);对流程可读性要求极高、扩展点会过度碎片化的场景。

误区 修正
只抄目录不守依赖方向 用架构测试禁止 domain 依赖 infrastructure
扩展点滥用 只在真的有业务变体时使用,否则保留显式分支
把 Executor 当新 Service 层继续堆规则 规则回到领域对象
DO 直接进 adapter 通过 client DTO 出参
认为用了 COLA 就等于 DDD 分层不产生模型,模型仍需业务建模
  • Alibaba COLA 开源项目文档与示例工程(github.com/alibaba/COLA)
  • Eric Evans《领域驱动设计》第 13 章(分层架构)
  • 业务中台与扩展点机制的公开技术文章(TMF 系列)