事业 - 最佳实践 - 编码 - 编码规范
事业-最佳实践-编码系列
一、原则
团队统一
二、价值
降低代码出错的几率
提高编码的效率
降低软件维护成本
越使用越高效
三、检查清单
1、编码
源代码组织
代码的分块是否恰当
代码的缩进是否清晰、整洁
有没有代码超出了每行字数的限制
代码的换行有没有引起混淆
括号的使用是不是一致、清晰
注释
代码有没有充分的注释
有没有注释掉的代码需要及时清理
注释是不是准确、必要、清晰
命名
名字是否遵守命名规范
名字是不是拼写正确、简单易懂
名字是不是有准确的意义
是否通过表意接口封装复杂逻辑
是否使用表意变量替代魔法数字
变量的声明是不是容易检索和识别
代码逻辑
复杂的表达式能不能拆解成简单的代码块
每一行代码是不是只有一个行为
变量的初始化有没有遗漏
代码逻辑是否清晰. 能够容易读懂. 函数或者类是否复杂,需要拆分
是否有重复代码,可以合并
代码边界处理是否遗漏
空指针判断
异常逻辑判断
异常的处理(是否有吞噬异常的代码)
批量查询限制最大数量
数据库查询 is_valid 是否考虑
类型转换是否正确
核心数据是否没做校验,完全依赖外部输入?
代码中使用的数据结构是否合理? List?Map?Set?Queue?Tree?
日志
使用占位符输出
不允许提前串化对象
不允许直接 e.printStackTrace()
不能只打印 e.getMessage()
日志输出时机是否合理
单元测试
代码是否易测试?
核心场景是否都有单元测试?
单元测试有没有覆盖各种正常、异常情况?
2、设计
代码是否实现了预期的业务需求?
目录设置是否合理、模块划分是否清晰?
代码结构是否满足“高内聚、松耦合”?
是否遵循经典的设计原则和设计思想(SOLID、DRY、KISS、YAGNI、LOD 等)?
是否有过度设计?
设计模式是否应用得当?
代码是否容易扩展?
代码是否可以复用?
3、接口
接口出入参有变更,能否兼容历史数据
接口必传字段是否做非空校验
接口没有使用基本类型、枚举
是否支持幂等
是否存在性能问题
是否必须新增接口方法
是否需要新增接口类
接口类是否满足单一原则、接口隔离原则
4、多线程
必要性:总时间,vs 单线程
是否可能创建大量线程吃光 CPU
线程间是否负载均衡
线程池:并行度,队列是否可能把堆打满,是否合理指定饱和策略,是否正确关闭
5、数据库
是否涉及两表及以上的关联查询且可能出现慢查
是否涉及通过非主键更新或删除记录
确保查询是走索引的,观注读选比
确保不会一次查询大量结果,将堆打满
深度分页确保使用索引覆盖 + 批量 ID 查询的方式实现
涉及 DB 更新操作需要事务控制
确保事务生效
合理设置事务隔离级别
合理设置事务传播特性
避免大事务
事务中禁止远程调用(RPC、MQ 等操作)
6、缓存
必要性
数据一致性
命中率
7、MQ
MQ 的协议如有改动是否影响老代码
消息是否考虑丢失情况处理
重复消息是否支持幂等处理
消费速度是否大于生产速度
8、配置
集群环境配置是否正确
提供的脚本是否是线上配置
版权声明: 本文为 InfoQ 作者【南山】的原创文章。
原文链接:【http://xie.infoq.cn/article/b63236bde5aba94a31eea1842】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论