健壮性
更安全的访问对象
实际获取的数据与预期并不相同。
Array.isArray(data) && data.forEach(()=>{})
异常处理
异常处理是代码健壮性的首要保障,关于异常处理有两个方面
- 合适的错误处理可以提高用户体验,在代码出错时优雅地提示用户
- 将错误处理进行封装,可以减少开发量,将错误处理与代码解耦
简洁
- 形参不超过三个,超过三个使用对象参数。同时建议使用对象解构语法(1. 能清楚看到函数签名有哪些熟悉;2. 可以直接重新命名;3. 解构自带克隆,防止副作用;4. Linter检查到函数未使用的属性。)
- 封装复杂的判断条件,提高可读性。
- 函数只做一件事,代码读起来更清晰,函数就能更好地组合、测试、重构。
- TODO注释,记录下应该做但还没做的工作。另一个好处,提前写好命名,可以帮助后来者统一命名风格。
- hack警示作用,解释此处不能修改的原因。
- 避免循规式注释,不要求每个函数都要求jsdoc,jsdoc一般是用在公共代码上。
类
- 单一职责原则 (SRP):保证“每次改动只有一个修改理由”。因为如果一个类中有太多功能并且您修改了其中的一部分,则很难预期改动对其他功能的影响。
- 开闭原则 (OCP):对扩展放开,但是对修改关闭。在不更改现有代码的情况下添加新功能。比如一个方法因为有switch的语句,每次出现新增条件时就要修改原来的方法。这时候不如换成多态的特性。
- 里氏替换原则 (LSP)
- 如果S是T的子类,则T的对象可以替换为S的对象,而不会破坏程序。
- 所有引用其父类对象方法的地方,都可以透明的替换为其子类对象。
- 保证任何父类对象出现的地方,用其子类的对象来替换,不会出错。
- 接口隔离原则 (ISP):定义是"客户不应被迫使用对其而言无用的方法或功能"。常见的就是让一些参数变成可选的。
- 依赖倒置原则(DIP):程序要依赖于抽象接口(可以理解为入参),不要依赖于具体实现。这样可以减少耦合度。