COLA代码规范
你好呀,我的老朋友!我是老寇,欢迎来到老寇云平台!
话不多说,跟我一起学习COLA,以下内容来源于书本及个人理解,请认真阅读!!!
最近看完了《代码精进之路从码农到工匠》和《程序员的底层思维》,作者张建飞老师,开篇强调写好代码并不是一件容易的事,需要持续地学习和实践。本人也赞同,因此,本人对重点内容做了笔记,希望对你有所帮助。
# 一、命名
“在计算机科学中有两件难事:缓存和命名”,因此,作为开发者,有时候为了想出一个好的名字,不惜花上几个小时,甚至绞尽脑汁。 为什么要这样做?因为一个好的命名可以方便阅读代码和梳理业务
1.命名需要显性化表达开发者的意图,拒绝无意义命名
变量命名需要能够准确描述业务
反例
// 过去的天数
int d;
// 页数
final int size = 10;
正确做法
// 过去的天数
int elapsedTimeInDays;
// 页数
final int PAGE_SIZE = 10;
函数命名要具体,拒绝无意义命名 例如, processData() 就不是一个好命名,相比之下, validateUserCredentials() 或 eliminateDuplicateRequests() 好很多
函数命名要体现做什么,而不是怎么做 例如,雇员信息存储在一个栈中,需要获取最近的一个雇员信息。 getLatestEmployee() 比 popRecord() 好,无需了解底层细节,业务更加具体
# 1.包命名
| 层次 | 包名 | 功能 | 必选 |
|---|---|---|---|
| Adapter层 | web | 处理页面请求Controller | 否 |
| Adapter层 | wireless | 处理无线端适配 | 否 |
| Adapter层 | wap | 处理wap端的适配 | 否 |
| Adapter层 | consumer | 处理外部message | 否 |
| Adapter层 | scheduler | 处理定时任务 | 否 |
| App层 | executor | 处理request,包括command和query | 是 |
| Domain层 | model | 领域模型 | 否 |
| Domain层 | ability | 领域能力,包括DomainService | 否 |
| Domain层 | gateway | 领域网关,解耦利器 | 是 |
| Infra层 | gatewayimpl | 网关实现 | 是 |
| Infra层 | mapper | ibatis数据库映射 | 否 |
| Infra层 | config | 配置信息 | 否 |
| Client SDK | api | 服务对外透出的API | 是 |
| Client SDK | dto | 服务对外的DTO | 是 |
# 2.类命名
| 规范 | 用途 | 解释 |
|---|---|---|
| xxxCmd | Client Request | Cmd代表Command,表示新增/修改/删除相关的请求 |
| xxxQry | Client Request | Qry代表Query,表示查询相关的请求 |
| xxxCO | Client Object | 用于传递数据,等同于DTO |
| xxxServiceI | Api Service | Api接口 |
| xxxCmdExe | Command Executor | 命令模式,一个新增/修改/删除相关的请求对应一个执行器 |
| xxxQryExe | Query Executor | 命令模式,一个查询相关的请求对应一个执行器 |
| xxxInterceptor | Command Interceptor | 拦截器,用于处理切面逻辑 |
| xxxExtPt | Extension Point | 扩展点 |
| xxxExt | Extension | 扩展实现 |
| xxxValidator | Validator | 校验器,用于校验的类 |
| xxxConvertor | Convertor | 转换器,实现不同层级对象互转 |
| xxxAssembler | Assembler | 组装器,组装外部服务调用参数 |
| xxxA | AggregateRoot | 聚合根,聚合实体和值对象 |
| xxxE | Entity | 领域实体 |
| xxxV | Value Object | 值对象 |
| xxxMapper | Mapper | 数据库映射 |
| xxxDomainService | Domain Service | 领域服务 |
| xxxDO | Data Object | 数据对象,持久化 |
| xxxGateway | Gateway | 领域网关,防腐层 |
| xxxConstants | Constant | 常量 |
| xxxConfig | Configuration | 配置 |
| xxxUtils | Utility | 工具 |
| xxxEvent | Event | 事件 |
| xxxEventHandler | Event Handler | 处理事件 |
| xxxFactory | Domain Factory | 领域工厂 |
| xxxController | Controller | 处理页面请求 |
| xxxEnum | Enum | 枚举 |
| xxxFilter | Filter | 过滤器 |
# 3.方法命名
# 方法命名(应用层+接口层)
| 操作 | 方法名约定 | 举例 |
|---|---|---|
| 新增 | save | saveUser |
| 删除 | remove | removeUser |
| 修改 | modify | modifyUser |
| 查看 | get | getUserById |
| 列表 | list | listUser listTreeMenu |
| 分页 | page | pageUser |
| 统计 | count | countUser |
| 导入 | import | importUser |
| 导出 | export | exportUser |
# 方法命名(领域层)
| 操作 | 方法名约定 | 举例 |
|---|---|---|
| 添加 | add | addEvent |
尽量避免CRUD形式的命名,要体现业务语义
# 方法命名(基础设施层)
| 操作 | 方法名约定 | 举例 |
|---|---|---|
| 新增 | create | createUser |
| 删除 | delete | deleteUser |
| 修改 | update | updateUser |
| 查看 | get | getUserById |
| 列表 | list | listUser |
| 分页 | page | pageUser |
| 统计 | count | countUser |
# 方法命名(Mapper)
| 操作 | 方法名约定 | 举例 |
|---|---|---|
| 新增 | insert | insertUser |
| 删除 | delete | deleteUser |
| 修改 | update | updateUser |
| 查看 | select | selectUserById selectUserId |
| 列表 | list | selectUserList |
| 分页 | page | selectUserPage |
| 统计 | count | selectUserCount |
# 4.错误码命名(显性)
| 类型 | 错误码约定 | 举例 |
|---|---|---|
| 参数异常 | P_XX_XX | P_OAuth2_UsernameIsNull:账号不能为空 |
| 系统异常 | S_XX_XX | S_DS_TableNotExist:表不存在 |
| 业务异常 | B_XX_XX | B_User_UsernameAlreadyExist:用户名已存在 |
上次更新: 11/2/2025, 9:24:21 PM