一、命名

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. 《代码精进之路》第一章:命名 读书笔记

    文章目录 1. 每一个概念一个词: 2. 对仗词 3. 后置限定词 4. 中间变量 5.注释 6. 命名工具 1. 每一个概念一个词: CRUD操作 方法名约定 新增 create 添加 add 删除 ...

  4. 代码精进之路-读后感

    文章目录 第一章 命名 函数名 辅助类 方法名约定 使用对仗词 后置限定词 注释 第二章 规范 日志规范 异常 第三章 函数 参数数量 短小的函数 职责单一 精简辅助代码 组合函数模式 SLAP 第八 ...

  5. 代码精进之路 码农到工匠pdf_VBA代码解决方案第065讲试看内容

    下面是我根据自己20多年的VBA实际利用经验,编写的四部教程,这些是较大块的"积木",可以独立的完成某些或者某类系统的过程,欢迎有需要的朋友联络(WeChat:NZ9668)分享. ...

  6. 代码精进之路-设计模式-拦截器链模式

    上一讲中说了<Tomcat的过滤器链 是如何实现的>,今天来看下 Spring的拦截器链是如何实现的. 从位置上来说 过滤器是属于Servlet容器级别的规范,拦截器是Spring自身的东 ...

  7. 《代码精进之路:从码农到工匠》——抽象

    写本文的原因是,抽象是软件设计中最重要的概念,但抽象这个概念本身又很抽象,值得我们花时间去好好探究一番. 抽象的力量 没有抽象思维,就没有人类光辉灿烂的现代文明. 原始人看到一片树林,不会给它们一个名 ...

  8. 代码精进之路-设计原则

    设计原则是前辈的总结,为后来人提供经验,写出更好的代码,降低系统复杂度,提高代码的稳定性,可维护性. 有时候你觉得这个方案这样设计也可以,那样设计也没问题,犹豫不决,这时不妨参考下设计原则,也许你心中 ...

  9. 代码精进之路--思维导图

最新文章

  1. 【前端_js】JavaScript知识点总结
  2. python羊车门问题_羊车门问题的python模拟和解释
  3. python基础教程:常量 (最全常量解析)
  4. 开发人员需要熟知的常用Linux命令Version、Kernel查看
  5. CIFAR-10数据集可视化二进制版本
  6. mysql_install_db is deprecated_MySQL5.7源码安装问题汇总
  7. 备用小知识[不断更新***]
  8. python爬虫什么意思-python的爬虫是什么意思
  9. 聚类 | Map-Equation多级网络聚类模型——InfoMap
  10. unity Vuforia物体移动的方向用AR箭头表示出来
  11. java播放加密后的wav文件,使用Java实时同时播放WAV文件
  12. 码力十足学量化|如何获取指数成分股及权重数据
  13. 如何把一张照片的像素提高_简单操作,让一张模糊的照片秒变清晰
  14. 经典网页设计:25个优秀的个人网站设计欣赏
  15. 一位资深程序员大牛给予Java初学者的学习路线建议
  16. mysql sphinx windows安装_Sphinx在windows下如何安装使用
  17. Session Fixation session固定攻击
  18. 华中科技大学省[you]选[ji]
  19. 力扣网-罗马数字转整数
  20. iOS 3DES加密解密(一行代码搞定)

热门文章

  1. 百度云无法在网页上调用客户端进行下载文件(已安装最新版)
  2. Java | SpringBoot 常用注解详解
  3. 【吐槽系列】如何用最贱蛋的方式将web程序变为桌面应用
  4. 批处理替换网易云音乐UnblockNeteaseMusic的Ip
  5. c语言位非运算符,C语言-位运算符
  6. 按键精灵刷阿里妈妈广告联盟源码 V1.1版
  7. 5G NR 频率计算
  8. 在IDEA中使用搜狗输入法输入文字是繁体字,但是在其他地方输入文字是正常的简体字
  9. java实验报告(多线程的应用)
  10. 计算机bootmgr丢失,如何修复Bootmgr压缩错误,及压缩导致的数据丢失问题?