最近组里来了新人,从别的项目组转过来,也算不上是新人了,但是在代码习惯上有很多问题,写出来的代码问题也多。
虽然说写代码个人有个人的习惯,但是一个逻辑清晰简洁的代码,总是让人更易阅读,也更少的问题。
好的代码,一般有一些通用的标准
比如圈复杂度,可读性,良好的注释,语义明确的方法/字段名
在我们的项目中,也有一些常用的规范,是每一个新人进来都会被宣导的
- 较低的圈复杂度
一般来说,更低的圈复杂度,可阅读性更高。
我们倡导扁平化的逻辑,尽量减少圈复杂度,让分支更少,更易于阅读和维护 - 代码行数
降低每个类的代码行数,降低每个方法的代码行数
能一行实现的代码就不要用两行来实现 - 代码注释
方法以及关键步骤一定要有注释
不仅要注释是做什么还要注释为什么 - 避免过度封装,明确返回类型
service方法一定有明确返回类型,避免用过度封装的公共类
在多系统合作的情况下,这种情况尤为重要,过度封装的结果就是每一个消费方都要询问生产方返回的数据结构 - web层作用
web层不光是服务的转发,还可以做一些基础的入参校验,返回的统一封装 - 私有方法
非对外提供服务的方法要定义成私有方法 - 语义明确
定义变量和方法名时,应该语义明确,一个更新的方法不能叫query** - 事务
不需要事务的地方不要加上事务,比如定时任务,一个定时任务可能处理很长时间,在最外层加上事务会让表一直处于tx lock状态,影响其他业务 - 减少copy
不必要的时候尽量减少copy property, 利用反射copy也会影响性能, 还要考虑深浅copy的问题 - 日志
日志不要打印太多,影响运行效率, 有时还会导致问题比如忘记判空 - sql效率
sql效率是个很大话题,比如我们要注意
避免在索引字段使用函数/计算操作/使用空值
like左模糊会让索引失效可使用reverse代替
可以使用union all的地方不要使用union
非必要避免使用耗费资源的操作比如DISTINCT,UNION,MINUS,INTERSECT,ORDER BY - 异步任务
不要在web层新起线程调用service启动异步任务,超时会让service主线程终端 - 关闭流
使用完io流,必须手动关闭,因为gc无法释放虚拟机之外的系统资源 - 异常
无需处理的异常不要catch, 业务问题直接抛出业务异常 - 缓存
高频使用的数据可以考虑缓存,更新较少的数据性能要求较高的地方使用缓存 - 分页
数据可能很大的情况一定要用分页查询 - 递归
有递归调用的地方,一定要注意退出条件,避免造成死循环 - 批处理
可以批量更新/插入的尽量批量处理,避免频繁连接数据库 - 设计
写代码前要做好设计,让逻辑及可能的简介清晰 - 测试
一定要做有效的单元测试
通常如果能遵循这些规范来开发,一般代码的问题都不会很大了,如果有问题也是较高级的问题,值得去研究排查
网友评论