Code Review
Code Review 参考
具体规则:
评分大项 | 序号 | 小项 | 具体要求 | 扣分范围 |
---|---|---|---|---|
一、总体功能设计 | 1 | 流程清晰 | 1、熟练讲解对应业务需求; 2、代码的运行流程清晰合理; |
1~15 |
2 | 实现方式 | 1、目录、文件分配合理; 2、正确并规范使用组件及工具方法; 3、设计模式正确; |
1~35 | |
二、类、对象、数据结构 | 1 | 声明 | 使用正确的类型声明 | 1 |
2 | 权责 | 符合权责单一原则,负责的事情应清晰明了 | 1~10 | |
3 | 内聚 | 相同功能的类、函数、对象、组件等应尽量抽为共用 代码耦合度合理 |
1~10 | |
三、命名 适用于所有项目名,文件名,变量名,函数名,class, ID |
1 | 名副其实 | 符合命名规则、符合读写习惯 | 一处扣1分 |
2 | 避免误导 | 不要有误导性命名 | 一处扣1分 | |
3 | 做有意义的区分 | 做有意义的区分 比如applicationName 非写个applicationNameString 难道name会是个浮点型不成 又如enable 非写个isEnable 难道enable会是个字符串不成 |
一处扣1分 | |
4 | 使用读得出来的名称 | 不要有读不通的名字 | 一处扣1分 | |
5 | 使用可搜索的名称 | 使用可搜索的名称 | 一处扣1分 | |
6 | 避免使用编码 | 变量不要使用前缀、后缀、纯大写等。如果使用给出合理解释 | 一处扣1分 | |
7 | 避免思维映射 | 尽量不使用单字母临时变量,循环里可酌情使用 | 一处扣1分 | |
8 | 变量名、类名、组件名 | 要是名词或名词短语 | 一处扣1分 | |
9 | 方法名 | 使用动词或动词短语,使用描述性名称 | 一处扣1分 | |
10 | 每个概念对应一个词 | 相同行为的方法命名规则需要固定 比如:同一个人写3个component组件,都有一个组件创建时,加载数据的函数。一个叫initData, 一个叫loadData, 一个叫getData 这就不合适 又如:一个组件使用了三个弹窗,三个弹窗的事件响应函数命名各不相同,有的叫handleClick, 有的叫onClick, 有的叫afterClicked 这就不合适 |
一处扣1分 | |
11 | 添加有意义的语境 | 有语境支撑的变量,可不带语境 没有语境支撑的变量,要自带语境 比如有Application.js的一个类,里面是一个Application类,在此类里面需定义一个状态枚举供此文件自己使用。可以定义为StatusEnum。因为此文件和Application类 已经提供了语境 如果枚举值需要给外部使用,或定义在enum.js里面。应命名为ApplicationStatusEnum |
一处扣1分 | |
四、函数 | 1 | 短小精悍,结构语法合理清晰 | 看一眼觉得精简 空间复杂度合理 时间复杂度合理 如: 1、不要有不必要的临时变量;
2、能用局部变量的,就不要使用全局变量; 3、使用合适的API方法,比如正确区分并使用map, filter, forEach,find,some等方法。 4、正确定义let/const变量 |
一处扣2分 |
2 | 更短小 | 细看也觉得很精简 1、在最后的else逻辑中,有return方法,可去掉else,直接return(sonar要求) |
一处扣1分 | |
3 | 只做一件事,每个函数一个抽象层级 | 名字和内容一致,不要做多件事。 判断标准 1.看能否再拆出一个函数,该函数不仅仅是单纯的重新诠释其实现 2.看是不是做的同一抽象层上的事 |
一处扣2分 | |
4 | Switch语句 | 当 if 判断逻辑比较多的时候,使用switch | 一处扣1分 | |
5 | 函数参数 | 最好没有参数,第二选择是一个参数,最多三个, 当有多个参数时,建议使用对象解构赋值。 function({id: ‘', date: ‘’, type: '’}) 参数命名也要严格按照规范来。 |
一处扣1分 | |
6 | 无副作用 | 如: setName(value) { this.name = value
} shortName的值本不该在这个函数修改,会让人忽略其变化过程。 |
一处扣2分 | |
7 | 分隔指令与询问 | 要么做什么事,要么回答什么事,二者不可兼得。 比如 setAndCheckExist() =>
|
一处扣1分 | |
8 | 别重复自己 | 相同的代码不要在多个函数中反复出现 | 一处扣1分 | |
五、注释 | 1 | 坏注释 | 能通过函数和变量读懂代码就不需要注释,不要添加无用的、日志式的、废话型的、误导性的、循规式的注释 | 1 |
2 | 没有注释 | 该有注释的地方没有注释 | 1 | |
六、代码格式 | 1 | SonarLint, ESLint | 扫描不过 | 2 |
七、代码风格 | 1 | 参考vue风格指南,或者使用统一的插件格式化 | 如生命周期钩子函数一般按照被调用的顺序进行书写,方便阅读 | 1 |
2 | 按调用顺序,从上至下编写 | 文件内代码编排混乱 相关联的函数尽量放到一起。 |
2 | |
3 | 不要做一些不需要的事情 | 比如: 1、在使用async await 之前,想清楚当前场景是否真的需要同步处理。 2、对于promise的一些错误处理,promise本身已经做了很好的正确与错误的区分,就不需要在外面通过try catch 去捕获了。 |
||
八、错误处理 | 1 | 处理参数错误 | 参数错误 | 1 |
2 | 处理接口返回错误 | 数据没有判空 没有结束流程,比如依然在loading |
2 | |
3 | 处理用户操作错误 | 重复点击引发错误 未校验用户输入 |
2 | |
4 | 抽离try/catch 代码块 | 如非必要,不要写try/catch | ||
九、ADA | 1 | ADA检测 |
A/AA 的问题要清零 |
1~5 |
2 | 屏幕朗读工具 | JAWS 能正确访问,并且朗读的文案清晰易理解 | 1~5 | |
十、自适应与兼容性 | 1 | 兼容不同屏幕大小 | 通过谷歌浏览器调试工具移动端模式查看,是否适配。 | 1~5 |
2 | 兼容不同浏览器 | IE待定 | 1~5 | |
十一、国际化 | 1 | key命名正确 | 字母、数字、下划线 | 1 |
2 | 尽量在模板和render函数中使用国际化方法 | 在可行的范围内尽量使用 | 1 | |
十二、CSS | 1 | 正确合理使用组件样式库 | 1、对于组件样式库就可以完全解决的问题,就不要自定义样式了。 2、合理定义自定义样式。 |
1 |
十三、其它 | 1 | 代码安全 | v-html内容,没有做xss过滤。 | 5 |
2 | 代码来源 | 拷贝的非法代码 | 5~10 |
评分表
扣分大项 | 扣分小项 | 扣分 | 扣分代码 |
---|---|---|---|
总得分: | 代码质量评级: |
代码质量评级:
【96~100】 优
【91~95】 好
【86~ 90】良好
【81~85】良
版权属于: vincent
转载时须注明出处及本声明