这个作业属于哪个课程 | https://edu.cnblogs.com/campus/fzu/2020SPRINGS/ |
---|---|
这个作业要求在哪里 | https://edu.cnblogs.com/campus/fzu/2020SPRINGS/homework/10784 |
团队名称 | 知社 |
这个作业的目标 | 制定代码规范 |
作业正文 | https://www.cnblogs.com/zhishe/p/12945267.html |
其他参考文献 | 阿里巴巴 Java 开发手册终极版 v1.3.0 |
后端代码规范
-
缩进
缩进采用 4 个空格,禁止使用 tab 字符。
-
变量命名
-
代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
-
代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式
-
方法名、参数名、成员变量、局部变量都统一使用
lowerCamelCase
风格,必须遵从驼峰形式。localValue getHttpMessage() inputUserId
-
常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长
-
中括号是数组类型的一部分,数组定义如下:
String[] args
-
POJO
类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误 -
杜绝完全不规范的缩写,避免望文不知义
-
-
每行最多字符数
单行字符数限制不超过 120 个,超出需要换行,换行时遵循如下原则:
- 第二行相对第一行缩进 4 个空格,从第三行开始,不再继续缩进
- 运算符与下文一起换行
- 方法调用的点符号与下文一起换行
- 在多个参数超长,逗号后进行换行
- 在括号前不要换行
-
函数最大行数
-
函数、类命名
-
包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式
-
类名使用
UpperCamelCase
风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO
等 -
抽象类命名使用
Abstract
或Base
开头;异常类命名使用Exception
结尾;测试类命名以它要测试的类的名称开始,以Test
结尾 -
如果使用到了设计模式,建议在类名中体现出具体模式
public class OrderFactory; public class LoginProxy; public class ResourceObserver;
-
接口和实现类的命名有两套规则
- 【强制】 对于
Service
和DAO
类,基于SOA
的理念,暴露出来的服务一定是接口,内部的实现类用Impl
的后缀与接口区别 - 【推荐】 如果是形容能力的接口名称,取对应的形容词做接口名(通常是
–able
的形式)
- 【强制】 对于
-
枚举类名建议带上
Enum
后缀,枚举成员名称需要全大写,单词间用下划线隔开 -
接口类中的方法和属性不要加任何修饰符号(
public
也不要加),保持代码的简洁性,并加上有效的Javadoc
注释。 尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。 (JDK8
中接口允许有默认实现,那么这个default
方法,是对所有实现类都有价值的默认实现) -
各层命名规约:
-
Service/DAO
层方法命名规约
- 获取单个对象的方法用
get
做前缀 - 获取多个对象的方法用
list
做前缀 - 获取统计值的方法用
count
做前缀 - 插入的方法用
save
(推荐)或 insert 做前缀 - 删除的方法用
remove
(推荐)或 delete 做前缀 - 修改的方法用
update
做前缀
- 获取单个对象的方法用
-
领域模型命名规约
- 数据对象:xxxDO,xxx 即为数据表名
- 数据传输对象:xxxDTO,xxx 为业务领域相关的名称
- 展示对象:xxxVO,xxx 一般为网页名称
- POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO
-
-
-
常量
-
不允许出现任何魔法值(即未经定义的常量)直接出现在代码中
-
long
或者Long
初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字 1 混淆,造成误解 -
不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护
-
常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量
- 跨应用共享常量:放置在二方库中,通常是 client.jar 中的 constant 目录下
- 应用内共享常量:放置在一方库的 modules 中的 constant 目录下
- 子工程内部共享常量:即在当前子工程的 constant 目录下
- 包内共享常量:即在当前包下单独的 constant 目录下
- 类内共享常量:直接在类内部 private static final 定义
-
如果变量值仅在一个范围内变化用
Enum
类。如果还带有名称之外的延伸属性,必须使用 Enum 类,如星期:public Enum {MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5), SATURDAY(6), SUNDAY(7);}
-
-
空行规则
方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同的语义之间插入一个空行。
-
注释规则
- 类、类属性、类方法的注释必须使用 Javadoc 规范,使用 /* 内容 / 格式,不得使用 //xxx 方式
- 所有的抽象方法(包括接口中的方法)必须要用 Javadoc 注释、除了返回值、参数、异常说明外,还必须指出该方法做什么事情,实现什么功能。
- 方法内部单行注释,在被注释语句上方另起一行,使用 // 注释。方法内部多行注释使用 / */
- 所有的枚举类型字段必须要有注释,说明每个数据项的用途
- 代码修改的同时,注释也要进行相应的修改,尤其是参数、返回值、异常、核心逻辑等的修改
- 注释掉的代码尽量要配合说明,而不是简单的注释掉(后续会恢复 / 永久不用)
- 特殊注释标记,请注明标记人与标记时间。注意及时处理这些标记,通过标记扫描,经常清理此类标记
-
操作符前后空格
- if/for/while/switch/do 等保留字与左右括号之间都必须加空格
- 任何运算符左右必须加一个空格。
-
其他规则
- 方法参数在定义和传入时,多个参数逗号后边必须加空格
- IDE 的 text file encoding 设置为
UTF-8
; IDE 中文件的换行符使用Unix
格式,不要使用 windows 格式
前端代码规范
-
变量命名
- 代码中的命名采用驼峰命名法,例如
joinClubApplications
- 代码中的命名采用驼峰命名法,例如
-
method 方法命名规范
- 驼峰式命名,统一使用动词或者动词+名词形式,例如:
jumpPage、openCarInfoDialog
- 请求数据方法,以 Data 结尾,例如:
getListData、postFormData
- init、refresh 单词除外
- 尽量使用常用单词开头(set、get、go、can、has、is)
- 驼峰式命名,统一使用动词或者动词+名词形式,例如:
-
views 下的文件命名
-
尽量是名词,且使用驼峰命名法
-
名字至少两个单词,例如
workbenchIndex
,而不是workbench
-
-
props 命名
- 在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板中应该始终使用 kebab-case,例如:
<script> props: { greetingText: String } </script> <welcome-message greeting-text="hi"></welcome-message>
- 在声明 prop 的时候,其命名应该始终使用 camelCase,而在模板中应该始终使用 kebab-case,例如:
-
多个特性的元素规范
- 多个特性的元素应该分多行撰写,每个特性一行,例如:
<img src="https://vuejs.org/images/logo.png" alt="Vue Logo" > <my-component foo="a" bar="b" baz="c" > </my-component>
- 多个特性的元素应该分多行撰写,每个特性一行,例如:
-
元素特性的顺序
- 原生属性放前面,指令放后面
-
注释规范
- 单行注释:注释单独一行,不要在代码后的同一行内加注释,例如:
// 姓名 var name = “abc”;
- 多行注释,例如:
/** * 组件名称 * @module 组件存放位置 * @desc 组件描述 * @author 组件作者 * @param {Object} [title] - 参数说明 * @param {String} [columns] - 参数说明 * @example 调用示例 * <hbTable :title="title" :columns="columns" :tableData="tableData"></hbTable> **/
- 单行注释:注释单独一行,不要在代码后的同一行内加注释,例如:
-
源码风格
- 定义变量使用
let
,定义常量使用const
- 静态字符串一律使用单引号或反引号,动态字符串使用反引号,例如:
const a = 'foobar' const b = `foo${a}bar` const c = 'foobar'
- 如果模块只有一个输出值,就使用 export default,如果模块有多个输出值,就不使用 export default,export default 与普通的 export 不要同时使用,例如:
import myObject from './importModule'
- 如果模块默认输出一个函数,函数名的首字母应该小写,例如:
function makeStyleGuide() { } export default makeStyleGuide;
- 如果模块默认输出一个对象,对象名的首字母应该大写,例如:
const StyleGuide = { es6: { } }; export default StyleGuide;
- 定义变量使用
-
Props 规范
- Props 定义应该尽量详细,例如:
props: { status: { type: String, required: true, validator: function (value) { return [ 'syncing', 'synced', 'version-conflict', 'error' ].indexOf(value) !== -1 } } }
- Props 定义应该尽量详细,例如:
-
CSS规范
- 统一使用"-"连字符
- 省略值为 0 时的单位,例如:
padding-bottom: 0; margin: 0;
- 如果 CSS 可以做到,就不要使用 JS
- 建议并适当缩写值,提高可读性,特殊情况除外,例如:
.box{ border-top: 0; font: 100%/1.6 palatino, georgia, serif; padding: 0 1em 2em; }
- 元素选择器应该避免在 scoped 中出现,因为在 scoped 样式中,类选择器比元素选择器更好,因为大量使用元素选择器是很慢的。
-
其他
- 调试信息 console.log() debugger 使用完及时删除
- 避免 this.$parent
- 除了三目运算,if,else 等禁止简写,都要加大括号