网站首页 > 博客文章 正文
COLA 是 Clean Object-oriented and Layered Architecture的缩写,代表“整洁面向对象分层架构”,是来自阿里技术专家的开源项目。目前COLA已经发展到COLA 4.0。
作者张建飞(Frank)创建COLA的初心之一——试图探索一套切实可行的应用架构规范,这个规范不是高高在上的纸上谈兵,而是可以复制、可以理解、可以落地、可以控制复杂性的指导和约束。
一、COLA 4.0提供的项目模板
COLA 4.0 提供了两套Archetype,一套是纯后端应用,另一套是Web后端应用,它们的区别是Web后端应用比纯后端应用多了一个Adapter模块。
可以基于COLA提供的项目模板类型,通过如下命令行快速创建COLA应用:
(1)生成Web后端应用(有Adpater层)
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.0.1
(2)生成纯后端应用(没有Adapter层)
mvn archetype:generate \
-DgroupId=com.alibaba.cola.demo.service \
-DartifactId=demo-service \
-Dversion=1.0.0-SNAPSHOT \
-Dpackage=com.alibaba.demo \
-DarchetypeArtifactId=cola-framework-archetype-service \
-DarchetypeGroupId=com.alibaba.cola \
-DarchetypeVersion=4.0.1
上述maven命令执行命令后,会看到如下的模块结构,上部分是应用骨架,下部分是COLA组件。
二、COLA架构及其组件模型
COLA架构及其组件模型图,其中包括Adapter层、Application层、Domain层、Infrastructure层和Client二方库,如图所示。
绿色表示必选的组件,黄色表示可选的组件。
这些组件各自都有自己的职责范围,组件的职责是COLA的重要组成部分。
这些组件的详细职责描述如下:
(1) 二方库里的组件
- api:存放的是应用对外的接口。
- dto.domainmodel:用来做数据传输的轻量级领域对象。
- dto.domainevent: 用来做数据传输的领域事件。
二方库主要用来定义服务接口和数据协议,也是实现Shared Kernel(共享内核)的重要手段之一。
(2) Application里的组件
- service:接口实现的facade,没有业务逻辑,可以包含对不同终端的adapter。
- eventhandler:处理领域事件,包括本域的和外域的。
- executor:用来处理命令(Command)和查询(Query),对复杂业务,可以包含Phase和Step。
- interceptor: COLA提供的对所有请求的AOP处理机制。
(3)Domain里的组件
- domain:聚合根、实体和值对象等等。
- domainservice: 领域服务,用来提供更粗粒度的领域能力。
- gateway:对外依赖的网关接口,包括存储、RPC、Search等。
(4)Infrastructure里的组件
- config:配置信息相关。
- message:消息处理相关。
- convertor:数据对象(DataObject)和领域实体对象(Domain Entity)之间的转换。
- gateway:对外依赖的网关接口(Domain里的gateway)的实现。
在使用COLA的时候,请尽量按照组件规范约束去构建我们的应用。这样可以让我们的应用结构清晰、有章可循。如此这般,代码的可维护性和可理解性会得到极大的提升。
三、基于COLA架构的应用实践
下图是基于COLA 架构建的DDD经典示例应用-货物运输系统(Cargo Tracker Application)的代码结构:
《COLA 4.x架构入门和项目实践》技术专栏详细讲解COLA框架的使用,领域驱动设计DDD中领域模型的开发,以及DDD经典示例项目-货物运输系统(Cargo Tracker Application)代码实现细节。
————————————————
本文部分内容来自于CSDN博主「张建飞(Frank)」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:
https://blog.csdn.net/significantfrank/article/details/100074716
猜你喜欢
- 2025-03-19 解密阿里线上问题诊断工具Arthas和jvm-sandbox
- 2025-03-19 2年5个月13天,从外包到拿下阿里offer,没想到屌丝也能有今天
- 2025-03-19 扩展阿里p3c实现自定义代码规范检查
- 2025-03-19 揭秘阿里 COLA 架构:开启企业级应用开发新境界--免费开源
- 2025-03-19 Spring新闻汇总:Framework、Data、Security、Integration和Modulith发布里程碑版本
- 2025-03-19 数据治理(十二):Ranger2.1.0 源码编译
- 2025-03-19 关于Maven Mirrors 的正确使用(maven mirror 本地)
- 2025-03-19 阿里强制使用SLF4J日志框架的缘由
- 2025-03-19 大模型探索:阿里向量检索服务DashVector
- 2025-03-19 入职阿里巴巴,成为年薪百万阿里P7高级架构师需要必备哪些技术栈
你 发表评论:
欢迎- 374℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 369℃用AI Agent治理微服务的复杂性问题|QCon
- 360℃初次使用IntelliJ IDEA新建Maven项目
- 353℃Maven技术方案最全手册(mavena)
- 351℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 349℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 348℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 344℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)