【持续更新】Java代码开发规范之重构

编写高质量的代码是一种艺术,本文持续记录各种代码优化的思路,不断提高代码的质量

代码重构

日常开发中,代码的质量对开发者的影响很大,高质量的代码更容易阅读。

1.混乱造成复杂,有序会减少复杂度;
2.规范是为了从无序走向有序,减少认知成本;
3.不要“打破窗口”,如果出现问题,及时修正,避免越来越糟糕

基本概念

  • 认知是人们获得知识和应用知识的过程,学习过程中存在认知成本;
  • 知识是人类对经验范围内的感觉进行总结归纳后发现的规律;

开发规范

  • 命名规范
  • 注释规范
  • 空行规范
  • 日志规范
  • 异常规范
  • 埋点规范
  • 架构规范

命名规范

包名、类名、方法名、变量名需采用有意义的名字,名字应为功能的抽象;命名保持一致性

有意义的命名

函数名要具体,避免空泛的命名。例如,processData()是一个不好的命名,它没有表明该方法要做的具体事情是什么;函数的命名要体现做什么,而不是怎么做。比如:getLatestEmeployee()方法比popRecord()好,因为栈数据的操作是底层实现细节,函数命名应该提升抽象层次、体现业务的语义。

类是一组数据和操作的封装,可以分为实体类和辅助类;实体类承载核心业务数据和核心业务逻辑,命名要体现业务语义;辅助类辅佐实体类完成业务逻辑,辅助类的命名要能通过后缀体现该类的功能。例如:控制路由的控制类CustomerController、提供Customer服务的服务类CustomerService、获取数据存储的存储类 CustomerRepository。对于辅助类,尽量不用Helper、Util之类的后缀,这些后缀的含义太笼统,会破坏SRP(单一职责原则)。

包(Package)代表有关系的类的集合,用于创建命名空间和分类组合。包名应该能够反映一组类在更高抽象层次上的联系。

模块民(Module)指Maven中的module。

名称保持一致性

  • 每个概念一个单词
  • 使用对仗词
  • 后置限定词

名字应该尽量做到自明

代码要在不借助其他辅助手段的情况下,传达出自身的含义;

注释用于阐述代码背后的意图,避免复述代码功能的注释,如果功能需要复述,重写该部分代码。比如:

糟糕的注释

1
2
3
4
5
6
try{
// 等待2秒
Thread.sleep(2000);
} catch(InterruptedException e) {
logger.error(e);
}

好的注释

1
2
3
4
5
6
try{
// 等待2秒,为了等待关联系统处理结果
Thread.sleep(2000);
} catch(InterruptedException e) {
logger.error(e);
}

第二个注释解释了sleep背后的业务意图。

参考链接

owefsad wechat
进击的DevSecOps,持续分享SAST/IAST/RASP的技术原理及甲方落地实践。如果你对 SAST、IAST、RASP方向感兴趣,可以扫描下方二维码关注公众号,获得更及时的内容推送。
0%