- API 优秀利于使用者了解,开发效率增快, 后期维护更加顺畅
- 静态多态,减少继承,类似的 API 不统一继承一个父类,因为统一继承导致 API public 数量过多,父类无意义方法对用户不友好
- 基于属性的 API, 属性对应于对象状态,通过属性为指标颗粒度的 API 便于使用者理解 API,需注意关联属性的顺序
- API 语义和文档 , API 注释中应有其参数(params) 和使用方法(methods)和意图(intent)
- 命名统一,不要用缩写,保持格式一致性,无论驼峰式写法还是 kebabs 式,命名最好能体现其副作用,参数过多用对象作为传参展开(JS:
...
运算符) 布尔参数改为枚举类型
-
const
入参,不要直接改变入参值,不然死在那都哭不出来,用一个另外的变量把入参值引用或者值拷贝:function (num) { let scopeNum = num; scopeNum = 5 return scopeNum } function (const num) { // 这样传参能保证不能直接修改,取消入参的副作用 // 以上写法是纯函数标记手法 // 也可以引入`flow` 或者 `typeScript` }--
-
统一关键字库
-
api 定义之前,抽离业务和功能语义关键字(TS 中抽离类型定义放入.d.ts 文件)让调用者感觉符合直觉,语义清晰
-
单一职责 最细颗粒度化,使用组合方式把多个解耦的单个接口组合成为一个大的功能接口, 接口设计单一职责, 方便多人协作时拓展和组合
-
面向未来的多态,面向拓展开发,面向修改关闭,升级做到兼容,不然会导致下游接口不可用(现在理解不了。。)
-
不要重复局部命名 上下文调用减少不必要的描述,提高 API 的精简度和清晰度,同时也要避免过度使用解构,容易丢失上下文,对变量环境来源一无所知(隔着几百行调用,上下文见鬼了)
const {setName} = this.props.store.user const {setVisible} = this.props.store.article
-
- 参考类库设计
- API 稳定之后,花时间整理文档,写文档的思考过程可能推动你重构和优化代码
- 有精力给我半年重构一次代码,测试完整跑一遍