COLA实践代码

COLA实践代码

# 下载代码
git clone https://gitee.com/XuXiaoCong/cola-springboot-demo.git

# 进入目录
cd cola-springboot-demo

# 下载依赖
mvn clean package

# 启动,使用Java17
java -jar start/target/start.jar

COLA模块结构

  • 模块结构图
module.png
模块 层级 作用 对比三层架构<br />(Controller、Service、Dao)
adapter 适配层 一般放MVC的控制器,或其他路由和适配 Controller
client 接口层 服务接口 相当于IService接口
app 应用层 client层的接口实现,业务代码 相当于ServiceImpl
domain 领域层 实体对象,充血模型,用面相对象设计
infrastructure 基础设施层 全局设置、数据库操作、远程调用、转换器等 持久化层(DAO),Mapper、数据对象
start 应用入口 Application.java,application.yml

功能

  • 每个模块下包含几项主要功能
image.png

目录结构划分

  • 先按照领域划分,如Order、Item、Stock
  • 再功能划分,如model、ability、gateway
  • 有一部分不需要用领域划分(个人理解)
    • Adapter层,因为这个层一般放控制器,控制器本身就聚合了多个接口,没必要再划分领域
    • Infrastructure层的config,因为配置一般都是全局配置,不使用用领域划分
image.png
image.png

模块介绍

start

  • 启动入口
  • 主要做项目设置,启用SpringBoot的功能
  • start/pom.xml
    • 增加打包插件,打包之后重命名为"start.jar"(默认为"start-版本号.jar")
    <build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

adapter

  • 适配层,一般放MVC的控制器
  • 控制器本身就聚合了多个接口,没必要再划分领域
包名 功能 备注 命名
web 处理页面请求的Controller Mvc的控制器 xxController
wireless/mobile 无线端/手机端的适配 很少不使用
wap wap端的适配 很少不使用

client

  • 对外接口层,存放服务接口及入参出参
  • 单体应用中,该层略显鸡肋,实际作用是在微服务架构中
  • 本层先划分领域,再划分功能
包名 功能 备注 命名
api 服务接口 interface xxServiceI
dto api的入参、出参 可引用"cola-component-dto"组件 入参(读):xxQry,即Query<br />入参(写):xxCmd,即Command<br />出参:xxCO,即Customer Object

app

  • App层主要放业务代码,或称为胶水代码
  • 本层先划分领域,再划分功能
包名 功能 备注 命名
executor 执行器,业务代码 根据读写数据分为Query和Command。Query可直接调用infrastructure的Mapper,Command一般不直接调用Mapper,而是使用Gateway操作 读数据类名:xxQryExe<br />写数据类名:xxCmdExe,作者习惯写成xxExe<br />同步方法:execute(xx)<br />异步方法:asyncExecute(xx)
consumer 消费者 消息队列消费者 xxConsumer
scheduler 定时任务 - xxScheduler

domain

  • 领域层,核心业务
  • 注意模型使用充血模型,使用面向对象写领域模型
  • 本层先划分领域,再划分功能
包名 功能 备注 命名
model 领域对象,里面放充血模型 单一对象的操作放在领域对象中<br />如:用户改名、改密码 -
ability 领域能力,包括DomainService 多个对象间的操作<br />如:两个账户间的转账 xxDomainService
gateway 网关接口,解耦利器 解耦底层数据 xxGateway

infrastructure

  • 基础建设层
  • 本层大部分需要先划分领域,再划分功能
  • config一般是全局配置,不需要划分领域
包名 功能 备注 命名
config 全局设置 全局异常、环境变量参数、@Configuration注解的配置等 -
mapper 数据库CRUD封装 如mybatis实现的数据库操作 xxMapper
mapper.dataobject 数据对象 数据库对象,使用贫血模型(POJO) 关系型:xxDO,即DataObject<br />Mongo:xxDoc,即Document
gatewayimpl 网关实现 调用mapper实现数据交互<br />RPC/Http对接其他系统Api,实现数据交互 xxGatewayImpl
convertor 转换器 数据对象(DO)、领域对象(Entity)、用户对象(CO)、数据转换对象(DTO)等各种"O"之间的转换<br />使用"Convertor"结尾 xxConvertor

参考文章

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容