每日代码审查:保持代码整洁的自查表

关注我,回复关键字“spring”免费领取Spring学习资料

如今,公司对软件工程师(主要是高级工程师)最迫切的需求之一,是以迭代和增量的方式提供高质量的代码审查。

这意味着在每次 PR 审查中,开发人员被要求反复提高即将合并代码的质量。

在这篇文章中,我将尝试指出开发人员在进行重构或审查时应牢记的基本原则。

让我们逐个主题来看这些点:

#1. 命名

  • 有明确意图的命名:方法或变量名应该在查看代码实现之前就能解释其意图。

  • 类名应该是名词或名词短语。

  • 方法名应该是动词。

  • 为每个概念选择一个词:get、retrieve、fetch 是相似的,选择一个统一使用它。

  • 使用计算机科学术语:例如,AccountAdapter 对程序员来说意味着适配器模式,如果没有相关的计算机科学名称,则使用面向问题的名称。

  • 使用可搜索的名称:在 IDE 中搜索特定短语会更容易。

#2. 函数

  • 函数应该小:函数越大,调试起来就越困难。

  • 块和缩进应该整洁:用好 IDE 的代码格式化。

  • 只做一件事:一个函数意味着一个任务。

  • 每个函数一个抽象层次:函数应该足够小,以便在一个抽象层次的范围内实现。

  • 从上到下阅读代码:应该应用逐步下降规则。嵌套函数应该在母函数之后,以便有像阅读书籍一样的感觉。

  • 使用较少的输入:超过 3 个输入则很糟糕,这可能意味着函数在做不止一件事。

  • 没有副作用:函数应该只做一件事,并且应该正确地做这件事,而不对其他状态产生不良影响。

  • 没有重复:将频繁使用的代码片段集中在一个地方。

#3. 注释

  • 尽量用代码表达意图:你的代码应该是自解释的,以至于读者不需要额外的注释。

  • 好的注释:

    • 法律注释

    • 信息性注释

    • 澄清晦涩的代码

    • 警告后果

    • TODO注释

  • 坏的注释:

    • 含糊不清

    • 冗余注释

    • 误导性注释

    • 强制性注释

    • 日志注释

    • 噪音注释

#4. 格式化

  • 垂直格式化:类的大小最多 200-300 行代码。

  • 报纸隐喻:类应该像报纸文章一样。

  • 垂直开放性:类中变量/方法之间的垂直距离。

  • 变量声明:类变量在构造函数之前,局部变量靠近其使用位置。

  • 依赖的方法应该靠近其实现:以便轻松地从一个代码行跳到另一个代码行。

  • 水平密度:避免需要滚动的长行。

  • 团队规则:团队的一致性比干净的代码更重要。

#5. 对象和数据结构

  • 数据/对象反对称性:

    • 过程式代码(使用数据结构的代码)使得在不改变现有数据结构的情况下添加新函数变得容易。面向对象的代码则使得在不改变现有函数的情况下添加新类变得容易。

    • 过程式代码使得添加新数据结构变得困难,因为所有函数都必须改变。面向对象的代码使得添加新函数变得困难,因为所有类都必须改变。

  • 迪米特法则:模块不应该知道它操作的对象的内部。

  • 数据传输对象:具有公共变量且没有函数的类使得数据传输更容易,但可能存在安全问题。

#6. 错误处理

  • 尽可能使用异常:而不是返回 null 或错误标志,抛出异常。

  • 在异常中提供上下文:尝试制定良好的异常处理策略。

  • 不要返回 null,不要传递 null。

#7. 单元测试

  • TDD 法则:

    • 在编写失败的单元测试之前,不允许编写生产代码。

    • 不允许编写超过失败所需的单元测试。

    • 不允许编写超过通过当前失败的测试所需的生产代码。

  • 保持测试干净和可读。

  • 每个测试/每个主题/每个概念一个断言。

  • 测试应该是 F.I.R.S.T.:

    • 快速

    • 独立

    • 可重复

    • 自验证

    • 及时

#8. 类

  • 封装:利用面向对象编程。

  • 单一职责原则:每个类应该有一个单一的责任。

  • 内聚性:函数操作的变量越多,它的内聚性就越强。

  • 应使用极简主义方法。

欢迎关注公众号:SpringForAll社区(spring4all.com),专注分享关于Spring的一切!回复“加群”还可加入Spring技术交流群!


给大家推荐我们团队开发的Chrome插件:YouTube中文配音。如果您跟我们一样,热爱看国外的视频学习前沿知识或者其他内容,该插件可以很好的帮助您讲外语视频一键转化为中文视频,官网:https://www.youtube-dubbing.com/



END



30s到0.8s,记录一次接口优化成功案例!
Spring Boot 如何做到无感刷新token?
Java微服务框架选择:Micronaut vs Spring Boot
像拼搭积木一样同时管理30+数据库引擎

高质量交流群,关注:SpringForAll

回复关键词:加群


相关推荐

  • Win10/11 危!退役 2 年,IE 浏览器不死,反被曝出高危漏洞?
  • 小米3年造车史,雷军公开了:起源于美国制裁,开过一场长达21天的会、试驾了170多辆车,还秀了把“漂移”
  • OpenAI突发新模型,GPT-3.5退役,大模型成本2年骤降99%
  • Neural Networks(CCF-B)特刊征稿:大语言模型时代的模型压缩
  • VLM集体「失明」?视力测试惨败,GPT-4o、Claude 3.5全都不及格
  • [开源]一款多元计算物联网平台,快速搭建可交付的物联网应用系统
  • 你还不知道MODBUS可以带多少个从站???
  • 10.9K支持几十个网站!!!100万用户的下载神器长这样???
  • 今日,OpenAI杀死ChatGPT-3.5
  • 字节跳动科学家组团演讲,揭秘AI视频生成大招!
  • 14句话看完雷军年度演讲!小米造车细节首揭秘,大气回应董明珠质疑
  • 首次!实至名归!清华包揽顶会最佳论文!
  • Spring Boot集成SFTP快速入门Demo
  • 程序员的欧洲杯:用大数据预测胜率,比踢球还刺激
  • GPT-3.5退役,GPT-4o mini来了,更小、性能更强、更便宜!
  • AGIX ETF 上线:构建 AI-native 的投资工具
  • 那些从大厂离职的人,都赚到钱了吗?
  • 清华大学联合斯坦福大学提出混合注意力机制MoA,大模型解码速率提高6倍
  • OpenAI发起价格战邀请,百万输入tokens只需一块钱!
  • 咦?我从GPT-4o mini身上看到了两家中国大模型厂商的影子