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端的适配 | 否 |
App层 | executor | 处理request,包括command和query | 是 |
App层 | consumer | 处理外部message | 否 |
App层 | scheduler | 处理定时任务 | 否 |
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 | 领域网关,防腐层 |
xxxConstant | Constant | 常量 |
xxxConfig | Configuration | 配置 |
xxxUtil | Utility | 工具 |
xxxEvent | Event | 事件 |
xxxEventHandler | Event Handler | 处理事件 |
xxxFactory | Domain Factory | 领域工厂 |
xxxController | Controller | 处理页面请求 |
# 3.方法命名
# 方法命名(应用层+接口层)
操作 | 方法名约定 | 举例 |
---|---|---|
新增 | save | saveUser |
删除 | remove | removeUser |
修改 | modify | modifyUser |
查看 | get | getById |
列表 | list | listUser |
分页 | page | pageUser |
统计 | count | countUser |
# 方法命名(领域层)
操作 | 方法名约定 | 举例 |
---|---|---|
添加 | add | addEvent |
尽量避免CRUD形式的命名,要体现业务语义
# 方法命名(基础设施层)
操作 | 方法名约定 | 举例 |
---|---|---|
新增 | create | createUser |
删除 | delete | deleteUser |
修改 | update | updateUser |
查看 | get | getById |
列表 | list | listUser |
分页 | page | pageUser |
统计 | count | countUser |
# 方法命名(Mapper)
操作 | 方法名约定 | 举例 |
---|---|---|
新增 | insert | insertUser |
删除 | delete | deleteUser |
修改 | update | updateUser |
查看 | select | selectById |
列表 | list | selectList |
分页 | page | selectPage |
统计 | count | selectCount |
# 4.错误码命名(显性)
类型 | 错误码约定 | 举例 |
---|---|---|
参数异常 | P_XX_XX | P_OAuth2_UsernameIsNull:账号不能为空 |
认证异常 | A_XX_XX | A_OAuth2_AccountPasswordError:账号或密码错误 |
系统异常 | S_XX_XX | S_DS_TableNotExist:表不存在 |
业务异常 | B_XX_XX | B_User_UsernameAlreadyExist:用户名已存在 |
上次更新: 11/22/2024, 4:10:36 AM