项目开发规范
一、为什么要有编码规范?
没有规范之前面临的问题
- 代码维护性差:写过的代码由于命名随性,不写注释导致二次修改不知道什么意思;
- 代码可读性差:不知道代码的意思,函数、常量、变量命名没法区分,导致很难分清哪些是什么作用;
- 产品开发周期被拉长:因为不规范的代码在维护期间需要大量的时间去解读意思,导致新功能下发后不能第一时间进入开发,因此交付周期拉长。
经济原理
- 最简单的理据,往往来自于最朴素的经济追求:利润;
- 能够提高代码的可读性:
- 遵守相同编码规范的代码,常常看起来就像是一个人写的一样。具有相同的风格是降低学习曲线的有效方式。当你新到一个具有编码规范的公司,读懂某几个函数或者模块的写作方式之后,常常代表你可以快速读懂相同规范的所有代码。
- 能减少人与人之间沟通的成本:
- 理解并遵守相同编码规范的人,就像在讲同一种语言,沟通会快速而准确。而在发生编码风格冲突的时候(不用怀疑,程序员之间的风格冲突是永恒的…),编码规范将会作为仲裁的最终依据,减少无效沟通带来的消耗
- 能提高代码质量:
- 合理的编码规范几乎每一条都会针对一个在编码世界里常见的技术问题。在实践中应用编码规范,就像是常备了一位高水准的代码审查者,能够帮助你规避很大比例的常规问题。
- 能为团队工作建立脚手架:
- 建立合理的规范,可以建立团队在技术上沟通的模式,更重要的是,还可以从团队内部,重用已有的程序智慧,为成员提供了有高度的脚手架,避免成员个体在程序设计上特定弱点所带来的质量短板。
- 能节约智力投入:
- 编码规范就是一个检查表,它必然是程序世界和公司经验的知识沉淀物,它能帮助你减少思考的密集程度,将最重要的智力资源投入到真正需要你去设计和关注的核心点上。
- 你不用再在多种程序风格中进行翻译和映射,因为只有一种程序风格。你看一眼函数名就知道它是做什么的、来自于哪个模块,看一眼变量名就知道它是什么内容大概是什么类型。
二、我们要遵循哪套规范?
前端
- Airbnb
- https://github.com/airbnb/javascript
Java
- 阿里巴巴Java开发手册
- https://yq.aliyun.com/arcticles/69327
- https://github.com/alibaba/p3c
三、如何确保我们遵循规范?
规范检测目标
- 写完一段代码之后,进行规范检查,代码通过检查之后才能提交;
- 规范检查标准:必须0报错,0警告;
JavaScript规范检查
- 利用gitHooks进行自动检查;
- 将要运行的脚本写入package.json;
- 就可以在提交代码时进行检测,如果验证不通过,则会打断提交。
Java规范检查
- 代码提交时检测
- 在提交代码框选Alibaba Code Guidelines选项;
- 如果有违反手册的地方会提示是否继续提交,选择取消后会自动对修改的代码进行扫描。
插件介绍
- Eslint
- Eslint是一个开源的JavaScript代码检查工具,由Nicholas C.Zakas于2013年创建。代码检查是一种静态分析,常用于寻找有问题的模式或者代码,并且不依赖于具体的编码风格。对于大多数编程语言来说都会有代码检查,一般来说编译程序会内置检查工具。
- JavaScript是一个动态的弱类型语言,在开发中比较容易出错。因为没有编译程序,为了寻找JavaScript代码错误通常要在执行过程中不断调试。像Eslint这样的可以让程序员在编码过程中快速发现问题而不是在执行过程中。
- ESlint的初衷是为了让程序员可以创建自己的检测规则。ESlint的所有规则设计都被设计成可插入的。ESlint的默认规则与其他的插件没有什么区别,规则本身和测试可以依赖于同样的模式。为了便于人们使用,ESlint内置了一些规则,当然你也可以在使用过程中自定义规则;
- https://eslint.org
- 阿里巴巴规约插件
- 《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程规约、设计规约等,这是近万名阿里Java技术精英的经验经验总结,并经历了多次大规模一线实战检验及完善。这是阿里回馈给Java社区的一份礼物,希望能够帮助企业开发团队在Java开发上更高效、容错、有协作性,提高代码质量,降低运维成本。
- https://github.com/alibaba/p3c
插件安装使用——ESkint
- 推荐:
ESlint:https://cn.eslint.org/
Airbnb:https://airbnb.io/javascript
四、学习资料
代码规范
https://www.yuque.com/books/share/e6392ba3-d2d2-4079-bcd7-32e51e311ab5?#
《代码规范学习课程》
命名规范
https://www.foolo.cn/qietu.php
除了vue组件,剩下的文件不允许存在大写情况,不允许使用中文命名,图片、文件是用下划线分割,图片应该用"在哪里_类型_是什么_状态.png"命名。
Git commit规范
https://www.jianshu.com/p/6433679cd10f