COLA架构设计
COLA架构核心职责就是定义良好的应用结构,提供最佳应用架构的最佳实践。通过不断探索,我们发现良好的分层结构,良好的包结构定义,可以帮助我们治理混乱不堪的业务应用系统。
COLA 的分层是一种经过改良的三层架构,主要是将传统的业务逻辑层拆分为应用层、领域层和基础设施层。
-
展示层(Presentation Layer):负责以 Rest 的风格接收 Web 请求,然后将请求路由给 Application 层执行,并返回视图模型(View Model),其载体通常是数据传输对象(Data Transfer Object, DTO);
-
应用层(Application Layer):主要负责获取输入、组装上下文、做输入校验、调用领域层做业务处理,当需要时发送消息通知。当然,层次是开放的,若有需要,应用层也可以直接访问基础设施层;
-
领域层(Domain Layer):主要封装了核心业务逻辑, 并通过领域服务(Domaini Service)和领域对象(Entities)的函数对外部提供业务逻辑的计算和处理;
-
基础设施层(Infrastructure Layer):主要包含数据访问通道(Tunnel)、Config 和 Comon。这里Tunnel这个概念对所有的数据来源进行抽象,数据来源可以是数据库(MySQL/NoSQL)、搜索引擎、文件系统,也可以是SOA服务等;Config 负责应用的配置;Common是通用的工具类;
规范设计
COLA制定了一系列的规范,包括组件(Module)结构、包(Package)结构、命名等。
组件规范
COLA规定一个应用至少要有3个组件:应用层、领域层和基础设施层。如果不是严格的前后端分离,也可以加入展示层的组件,但这是可选的。组件的依赖关系如下:
包规范
应用的包结构:
领域层的包结构:
命名规范:
在COLA架构中,制定了一系列的命名规范,以便通过名称就能知晓该类的作用和职责范围,从而极大的提升代码的可理解性,提升代码审查的效率。
规范 | 用途 | 解释 |
---|---|---|
xxxCmd.java | Client Request | Cmd代表Command,表示一个用户请求 |
xxxCo.java | Client Object | 客户端对象,用于传递数据,等同于DTO |
xxxServiceI.java | API Service | API接口类 |
xxxCmdExe.java | Command Executor | 命令模式,每一个用户请求对应的一个执行器 |
xxxInterceptor.java | Command Interceptor | 拦截器,用于处理切面逻辑 |
xxxExtPt.java | Extension Point | 扩展点 |
xxxExt.java | Extension | 扩展实现 |
xxxValidator.java | Validator | 校验器,用于校验的类 |
xxxConvertor.java | Convertor | 转化器,实现不同层级对象互转 |
xxxAssembler.java | Assembler | 组装器,组装外部服务调用参数 |
xxxE.java | Entity | 代表领域实体 |
xxxV.java | Value Ojbect | 代码值对象 |
xxxRepository.java | Repository | 仓储接口 |
xxxDomainService.java | Domain Service | 领域服务 |
xxxDo.java | Data Object | 数据对象,用于持久化 |
xxxTunnel.java | Data Tunnel | 数据通道,DAO 是最常见的通道,也可是其他通道 |
使用COLA架构
1、创建应用
执行以下命令:
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.3.1
2、运行应用
在项目目录下运行mvn install(如果不想运行测试,可以加上-DskipTests参数)。
进入start目录,执行mvn spring-boot:run。
运行成功的话,可以看到SpringBoot启动成功的界面。
生成的应用中,已经实现了一个简单的Rest请求,可以在浏览器中输入 http://localhost:8080/helloworld 进行测试。
注意:
如果要生成不是web工程而是service工程也类似,执行的是下面的命令:
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.3.1