什么是Code Review?
Code Review, 意即代码审查,是指一种有意识和系统的召集其他程序员来检查彼此的代码是否有错误的地方.
通常进行Code Review会有以下效果:
为什么要 Code Review?
要不要Code Review, 需要结合当前的环境和形势来决定. 如果项目组开发任务极其紧张, 此时再进行Code Review可能会收到不利的效果. 因势利导,求同存异是Code Review的核心所在.
Code Review尤其需要和项目组成员沟通和配合, 同时也在检验各成员的技术水平.
尤其需要注意的是, 人都有惰性, 每个人都有自己的一套行为准则和规范, 要想把他们的行为或规范统一起来, 很容易使他们产生抗拒心理.
在Code Review之前, 和项目成员沟通好, 有一个共同的愿景, 并辅助以相应的培训, 把部分人员的短板补齐. 会减轻项目成员的一些不适感, 也会使得项目运行更加顺畅.
同时, 也要注意, 不要事事求完美主义, 一步求成. 要知道"慢即是快".
Code Review的前提条件
Code Review本身属于"事后"工作, 可以起到查漏补缺的作用.
在推行Code Review时, 需要先提前准备以下几个工作, 以便团队能够更快更好的接受和实施.
例如, 当前我所带的项目组, 根据困难程度, Code Review实施分为3个阶段.
在实施过程中, 如果遇到比较大的阻力或困难, 推行Code Review所得到的收益较低时, 可以考虑适当"休息"一段时间.
Code Review如何实施?
从当前项目的实施过程的体会, 以及结合其他人的一些经验来看, 在Code Review时建议:
git 提交规范
git commit提交规范, 如:
都是严重阻扰review的因素之一,除了常规的描述信息外,还可以按类型等备注:
当然, 也要以利用一些工具, 来协助我们完成基本的约束和检查. 如: 优雅的使用Git
1. 可读性
衡量可读性, 有很好的实践标准, 即Code Review时能否非常容易的理解代码逻辑, 如果不能, 那意味着代码的可读性要进行改进.
2. 命名
3. 函数体长度/类长度
4. 参数个数
不要太多, 一般不要超过5个, 超过5个, 建议使用对象
5. 注释
恰到好处的注释, 能够帮助我们理解函数/类的作用.
1. 单一职责原则
这是经常被违背的原则, 也是最难运用好的原则.
2. 行为是否统一
1) 什么是行为统一? 例如:
2) 同一逻辑/行为, 有没有执行同样的代码路径
低质量的代码一个特征是, 同一逻辑/行为, 在不同的地方或不同的方式触发时, 没有执行同样的代码路径(产生出不同的结果), 或者是各处copy一份实现, 导致非常难以维护.
3. 代码污染
代码有没有对其他模块强耦合
4. 重复代码
主要看有没有把公用组件, 可复用的代码、函数抽取出来
5. 开放-封闭原则
简单理解是, 看代码好不好扩展
6. 健壮性
7. 错误处理
有没有很好的Error Handling? 如网络出错, IO出错等.
8. 面向接口编程/面向对象接口编程
主要看有没有进行合适的抽象, 把一些行为抽象为接口
9. 效率/性能
10. 代码重构
export function setDefaultImg(res) { let imgUrl = getImagePrefixUrl() let previewImgSrc = require('@/asserts/images/icon.png') if(res.imgId) { previewImgSrc = `${imgUrl}${res.imgId}.${res.type}?t=${+new Date()}` } return previewImgSrc}复制代码
上例函数, 其实是想对传入的参数进行判断, 如果值无效, 取默认图片, 否则返回拼接地址好的img src相对地址. 从函数的实现来看, 有如下几个问题:
可考虑重构为:
export function getImgSrc(imgId, imgType) { if(typeof imgId !== 'string' || typeof imgType !== 'string') { return require('@/asserts/images/icon.png') } return `${getImagePrefixUrl()}${imgId}.${imgType}?t=${+new Date()}`}
作者:JamesZhang80078
链接:
https://juejin.cn/post/6844904009065578510
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。