代码精进之路-命名与规范
一、命名
1、有意义的命名
如果你无法想出一个合适的名字,很可能意味着代码“坏味道”、设计有问题。这时可以思考一下:是不是方法里实现了太多的功能?或者类的封装内聚性不够?
2、函数名
函数命名要具体,空泛的命名没有意义。函数的命名要体现做什么,功能是什么,而不是怎么实现。
3、类名
可以将类分为两大类:实体类和辅助类
辅助类是辅佐实体类一起完成业务逻辑的,其命名要能通过后缀来体现功能。
例如:用来为Customer做控制路由的类为CustomerController,提供服务的类 CustomerService、提供数据持久化的类CustomerRepository
4、命名一致性
1)方法名前缀约定
新增 create
添加 add
删除 remove
修改 update
查询(单个结果) get
查询(多个结果) list
分页查询 page
统计 count
2)使用对仗词
add--》remove
increment--》decrement
open--》close
begin--》end
insert--》delete
show--》hide
create--》destory
lock--》unlock
source--》target
first--》last
min--》max
start--》stop
get--》set
next--》previous
up--》down
old--》new
3)后置限定词
把限定词 Total、Sum、Average、Max、Min加到名字的最后,保持一致的风格,就会比较优雅。例如:revenueTotal 总收入 、expenseTotal 总支出、revenueAverage平均收入、expenseAverage 平均支出
4)统一技术语言
VO、DTO、DO、DAO、PO、ServiceI、ServiceImpl、Component、Repository
5)命名参考
当你不知道如何优雅的命名时,可以模拟开源项目框架中是如何命名的,哪些使用频率高,看看大神都是怎么命名的。
二、规范
1、常量命名的字母全部大写,单词之间用下划线连接
TOTAL_COUNT、PAGE_SIZE
2、枚举类以Enum或者Type结尾
SexEnum.MALE、SexEnum.FEMALE
3、抽象类名使用 Abstract开头;异常类使用 Exception结尾;实现类以Impl结尾;测试类以Test结尾
4、包名统一小写,点分隔符之间有且仅有一个自然语义的英文单词,包名统一使用单数形式
5、异常处理
业务系统中设定两个异常:BizException 代表业务异常, SysException代表系统异常,而且这两个异常都是 Unchecked Exception。
C#、Python、Ruby语言都不支持 Checked Exception,因为其依赖成本要高于显示声明带来的收益。
最后针对业务异常和系统异常要做统一的异常处理,在应用处理请求的切面上进行异常处理收敛,其处理流程如下:
try{Response res = proces(request);
}`catch(BizException e){//业务异常使用 warn级别logger.warn("bizexception error code{},error message{}",e.getErrorCode(),e.getErrorMsg());
} catch(SysException ex){//系统异常使用ERROR级别logger.error("system error"+ex.getMessage(),ex);} catch(Exception ex){//兜底logger.error("error:"+ex.getMessage().ex);
}
千万不要在业务处理内部到处使用try catch 打印错误日志,这样会使功能代码和业务代码缠绕在一起,让代码显得很凌乱,而且影响代码的可读性。
6、显性化错误码
可以这样约定:
P 代码参数异常(ParamException)、B代码业务异常(BizException)、S代码系统异常(SystemException)
参数异常的错误码约定: P_XX_XX 例如:B_Customer_NameIsNull 客户姓名不能为空
业务异常的错误码约定: B_XX_XX 例如:B_Customer_NameAlreadyExist客户姓名已存在
系统异常的错误码约定: S_XX_XX ,例如:S_Unknow_Error 未知系统错误
7、建立完善的 代码审查机制,以便及时发现和修复“破窗”
代码精进之路-命名与规范相关推荐
- 代码精进之路:从码农到工匠读书笔记
代码精进之路:从码农到工匠读书笔记 第一章技艺 代码命名规范的意义: 由此可见,事物的复杂程度在很大程度上取决于其有序程度,减少无序能在一定程度上降低复杂度,这正是规范的价值所在.通过规范,把无序的混 ...
- 代码精进之路读后感(三)
继续拜读范老师的代码精进之路,越读越觉得虽然短小但是很精悍,别想歪,我们说的是正经事 第三篇范老师讲了讲什么是优秀的程序员,我觉得就是我啊,会打代码还会吹牛逼扯犊子,还会说几句相声扯几嗓子小曲,别打了 ...
- 《代码精进之路》第一章:命名 读书笔记
文章目录 1. 每一个概念一个词: 2. 对仗词 3. 后置限定词 4. 中间变量 5.注释 6. 命名工具 1. 每一个概念一个词: CRUD操作 方法名约定 新增 create 添加 add 删除 ...
- 代码精进之路-读后感
文章目录 第一章 命名 函数名 辅助类 方法名约定 使用对仗词 后置限定词 注释 第二章 规范 日志规范 异常 第三章 函数 参数数量 短小的函数 职责单一 精简辅助代码 组合函数模式 SLAP 第八 ...
- 代码精进之路 码农到工匠pdf_VBA代码解决方案第065讲试看内容
下面是我根据自己20多年的VBA实际利用经验,编写的四部教程,这些是较大块的"积木",可以独立的完成某些或者某类系统的过程,欢迎有需要的朋友联络(WeChat:NZ9668)分享. ...
- 代码精进之路-设计模式-拦截器链模式
上一讲中说了<Tomcat的过滤器链 是如何实现的>,今天来看下 Spring的拦截器链是如何实现的. 从位置上来说 过滤器是属于Servlet容器级别的规范,拦截器是Spring自身的东 ...
- 《代码精进之路:从码农到工匠》——抽象
写本文的原因是,抽象是软件设计中最重要的概念,但抽象这个概念本身又很抽象,值得我们花时间去好好探究一番. 抽象的力量 没有抽象思维,就没有人类光辉灿烂的现代文明. 原始人看到一片树林,不会给它们一个名 ...
- 代码精进之路-设计原则
设计原则是前辈的总结,为后来人提供经验,写出更好的代码,降低系统复杂度,提高代码的稳定性,可维护性. 有时候你觉得这个方案这样设计也可以,那样设计也没问题,犹豫不决,这时不妨参考下设计原则,也许你心中 ...
- 代码精进之路--思维导图
最新文章
- 【前端_js】JavaScript知识点总结
- python羊车门问题_羊车门问题的python模拟和解释
- python基础教程:常量 (最全常量解析)
- 开发人员需要熟知的常用Linux命令Version、Kernel查看
- CIFAR-10数据集可视化二进制版本
- mysql_install_db is deprecated_MySQL5.7源码安装问题汇总
- 备用小知识[不断更新***]
- python爬虫什么意思-python的爬虫是什么意思
- 聚类 | Map-Equation多级网络聚类模型——InfoMap
- unity Vuforia物体移动的方向用AR箭头表示出来
- java播放加密后的wav文件,使用Java实时同时播放WAV文件
- 码力十足学量化|如何获取指数成分股及权重数据
- 如何把一张照片的像素提高_简单操作,让一张模糊的照片秒变清晰
- 经典网页设计:25个优秀的个人网站设计欣赏
- 一位资深程序员大牛给予Java初学者的学习路线建议
- mysql sphinx windows安装_Sphinx在windows下如何安装使用
- Session Fixation session固定攻击
- 华中科技大学省[you]选[ji]
- 力扣网-罗马数字转整数
- iOS 3DES加密解密(一行代码搞定)