·vincent

Code Review

Code Review

Javascript

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、不要有不必要的临时变量;

eg: _this = this

2、能用局部变量的,就不要使用全局变量;

3、使用合适的API方法,比如正确区分并使用map, filter, forEach,find,some等方法。

4、正确定义let/const变量

一处扣2分
2更短小

细看也觉得很精简

1、在最后的else逻辑中,有return方法,可去掉else,直接return(sonar要求)

一处扣1分
3只做一件事,每个函数一个抽象层级

名字和内容一致,不要做多件事。

判断标准

1.看能否再拆出一个函数,该函数不仅仅是单纯的重新诠释其实现

2.看是不是做的同一抽象层上的事

一处扣2分
4Switch语句当 if 判断逻辑比较多的时候,使用switch一处扣1分
5函数参数

最好没有参数,第二选择是一个参数,最多三个, 当有多个参数时,建议使用对象解构赋值。

function({id: ‘', date: ‘’, type: '’})

参数命名也要严格按照规范来。

一处扣1分

6无副作用

如:

setName(value) {

this.name = value

this.shortName = value.substring(0,40)

}

shortName的值本不该在这个函数修改,会让人忽略其变化过程。

一处扣2分
7分隔指令与询问

要么做什么事,要么回答什么事,二者不可兼得。

比如 setAndCheckExist() =>

dataExist()

setData()

一处扣1分
8别重复自己相同的代码不要在多个函数中反复出现一处扣1分
五、注释1坏注释能通过函数和变量读懂代码就不需要注释,不要添加无用的、日志式的、废话型的、误导性的、循规式的注释1
2没有注释该有注释的地方没有注释1
六、代码格式1SonarLint, 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
九、ADA1ADA检测

WAVE / Bookmarklets 工具检测

A/AA 的问题要清零

1~5
2屏幕朗读工具JAWS 能正确访问,并且朗读的文案清晰易理解1~5
十、自适应与兼容性1兼容不同屏幕大小通过谷歌浏览器调试工具移动端模式查看,是否适配。1~5
2兼容不同浏览器IE待定1~5
十一、国际化1key命名正确字母、数字、下划线1
2尽量在模板和render函数中使用国际化方法在可行的范围内尽量使用1
十二、CSS1正确合理使用组件样式库

1、对于组件样式库就可以完全解决的问题,就不要自定义样式了。

2、合理定义自定义样式。

1
十三、其它1代码安全v-html内容,没有做xss过滤。5
2代码来源拷贝的非法代码5~10

评分表

扣分大项扣分小项扣分扣分代码
总得分:代码质量评级:

代码质量评级:

【96~100】 优

【91~95】 好

【86~ 90】良好

【81~85】良