一、编码规范
1、命名
“名副其实”——只做有意义的命名,规则如下:
- 可读
- 可搜索
- 为相同类型的变量使用统一命名
- 在解构中命名
- 力求精简,不添加不必要的上下文
- 属性、变量名、类名使用名词,函数名使用动词
2、函数
- 短小
- 只做一件事
- 函数名使用动词,要能够说明它要做什么
- 函数的参数不应该超过三个
- 函数式编程优于指令式编程
3、注释
- 不要多余
- 注释是对意图的解释
4、格式化
- 格式化是主观的,但是团队内应该保持一致
- 使用一致的大小写
- 函数的调用方与被调用方应该靠近:从上到下阅读代码
- 借助 Format 工具
5、对象和数据结构
使用 getters 和 setters 能更好的处理对象及其数据结构
- 使用 set 可以让验证变得更容易
- 封装内部实现
- 继承这个类, 你可以重写默认功能
- 使用 getting 和 setting 时, 容易添加日志和错误处理
6、单元测试
测试比发布更加重要。如果你没有测试或者测试不够充分,每次发布时你就不能确认没有破坏任何事情。
- 测试必须具备:可读性。
- 测试遵循 F(ast).I(ndependent).R(epeatable).S(elf-Validating).T(imely)。
二、编码设计
1、面向对象设计三原则
- 可复用性:抽象;
- 可维护性:多态;
- 可扩展性:继承。
“抽象”三原则:
- DRY(Don't repeat yourself):系统的每一个功能都应该有唯一的实现。也就是说,如果多次遇到同样的问题,就应该抽象出一个共同的解决方法,不要重复开发同样的功能。
- YAGNI(You aren't gonna need it):你自以为有用的功能,实际上都是用不到的,也就是就是尽可能快、尽可能简单地让软件运行起来。
- Rule Of Three:当某个功能第三次出现时,才进行“抽象化设计”。
编码原则是软件开发过程中如何实现 “高复用性” “高内聚,低耦合” 的行为准则。
2、软件设计原则
- 单一职责:永远不要有超过一个理由来修改一个类。
- 降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多。
- 提高类的可读性,提高系统的可维护性。
- 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
- 开闭原则:软件实体应尽量在不修改原有代码的情况下进行扩展。
- 对软件测试友好:只需要对扩展的代码测试即可。
- 可复用性好:通过增加新组件来满足不断变化的需求。
- 可维护性好:不用担心对原有组件的影响。
- 里氏替换:所有引用基类的地方必须能透明地使用其子类的对象。
- 接口隔离:不要强迫客户端程序依赖他们不需要使用的方法。
- 依赖倒转:抽象不应该依赖于细节,细节应当依赖于抽象。
3、设计模式
设计模式:针对同一性质问题的通用解决方案,即提供解决问题的思路,同时也是对设计原则的最佳实践。
关于设计模式请戳这里。
4、如何设计出 可复用性、可扩展性、可维护性 的代码?
- 遵循软件设计原则;
- 优先选择设计模式。
三、CodeReview
CodeReview 的意义:提升代码质量、提高编码能力、保证团队的代码一致性理解、提高团队凝聚力。
【参考文献】
- 《代码整洁之道》:读书笔记
- 《Clean Code JavaScript》
- 《3 Rs of Software Architecture》
- 《如何做 Code Review》
- 《Refactoring JavaScript》
【推荐阅读】
Best Practices for Speeding Up Your Web Site - Yahoo Developer NetworkThe Exceptional Performance team has identified a number of best practices for making web pages fast.https://developer.yahoo.com/performance/rules.html?guccounter=1&guce_referrer=aHR0cHM6Ly9saW5rLnNlZ21lbnRmYXVsdC5jb20v&guce_referrer_sig=AQAAAJaDm5blWwcU2NcXcR6rie23pPoBMJJ_HuozpEPBPPPKwAXwWaRz9QWGVwdgKH3JP7HUpk6XwY_QUOQ7ZcQ5IGIu-HOoRntwe63fI6BF_KYs4TpBYGbeIV4euD_hqVo6jKeyH71Q7Aq_zpp8XC2KXrfHIzMgpxQRBeLsI_n4dZGK空函数 | JavaScript 编码规范
http://itmyhome.com/js/kong_han_shu.html