【规范】alibaba编码规范阅读

时间:2023-03-09 19:09:43
【规范】alibaba编码规范阅读

一、编程规范

(一)命名规范

1、代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束

2、代码中的命名严禁使用评语与英文混合的方式,更不允许直接使用中文的方式

3、类名使用UpperCamelCase风格,必须遵从驼峰形式,但是:DO BO DTO VO AO除外

4、方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰格式

5、常量名全部大写,单词间用下划线隔开,力求词义表达清楚,不要嫌名字长

6、抽象类命名使用Abstract或Base开头:异常类命名使用Exception结尾:测试类命名以它要测试的类的名称开始,以Test结尾。

7、中括号是数组类型的一部分,使用String[] args 不要使用String args[]的方式

8、POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。

定义基本类型Boolean isDeleted的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,以为对应的属性名称是deleted,导致属性获取不到,进而抛出异常。

9、包名统一使用小写,点分隔符有且仅有一个自然语义的英文单词,包名统一使用单数形式。但是类名如果有复数含义,类名可以使用复数形式。

10、杜绝完全不规范的缩写,避免望文生义。

11、为了达到代码自解释的目标,任何自定义编程元素在命名时,使用尽量完整的单词组合来表达词义 eg:PullCodeFromRemoteRepository

12、如果模块、接口、类、方法使用了设计模式,在命名时体现出具体模式eg:public class OrderFactory ; public calss LoginProxy ; public class ResourceObserver

13、接口类中的方法和属性不要加任何修饰符号,保持代码的简洁性,并加上有效的javadoc注释。尽量不要在接口中定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。

14、接口和实现类的命名有两套规则

①、对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类是用Impl的后缀和接口区别

②、如果是形容能力的接口名称,取对应的额形容词做接口名(通常是-able的形式)

15、枚举类名建议加上Enum后缀,枚举成员名称需要大写

16、各层命名规范

Service/DAO层方法用get做前缀

  1. 获得单个对象的方法用get做前缀
  2. 获得多个对象的方法用list做前缀
  3. 获取统计值的的方法用count做前缀
  4. 插入的方法用save/insert做前缀
  5. 删除的方法用remove/delete做前缀
  6. 修改的方法用update做前缀

领域模型命名规约

  1. 数据对象:xxxDO  xxx为数据表名
  2. 数据传输对象:xxxDTO  xxx为业务领域相关的名称
  3. 展示对象:xxxVO  xxx一般为网页名称
  4. POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO

(二)常量定义

1、不允许任何魔法值(即未经定义的常量)直接出现在代码中

2、long或Long初始赋值时,使用大写的L,不能是小写的l,小写l容易跟数字1混淆,造成误解

3、不要使用一个常量类维护多有常量,按常量的功能进行分类,分开维护

4、常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。

  1. 跨应用共享常量:防止在二方库中,通常是client.jar中额的constant目录下
  2. 应用neural共享常量:放置在一方库中,通常是modules中的constant目录下
  3. 子工程内部共享变量:即在当前自工程的constant目录下
  4. 包内共享常量,即在当前包下单独的constant目录下
  5. 类内共享常量:直接在类内部private static final定义

5、如果变量值仅在一个范围内变化。且带有名称之外的额延伸属性,定义为枚举类。

(三)代码格式

1、大括号的使用约定,如果是大括号内为空,则简洁的写成{}即可,不需要换行;如果是非空代码块则:左大括号前不换行   左大括号后换行  右大括号前换行   右大括号后还有else等代码则不换行:表示终止的大括号后必须换行。

2、左小括号和字符之间不出现空格:同样,右小括号和字符之间也不出现空格

3、if/for/while/switch/do等保留字与括号之间都必须加空格

4、任何二目、三目运算符的左右两边都要加空格

5、采用4个空格缩进,禁止使用tab字符

6、注释的双斜线与注释的内容之间有且仅有一个空格

7、单行字符数限制不超过120个,超出需要换行,换行时遵循如下原则

  • 第二行相对第一行缩进4个空格,从第三行开始,不再继续缩进
  • 运算符与下文一起换行
  • 方法调用的点符号与下文一起换行
  • 方法调用时,多个参数,需要换行时,在逗号后进行
  • 在括号前不要换行

8、方法参数在定义和传入时,多个参数逗号后边必须加空格

9、IDE的text file encoding设置为UTF-8;IDE中文间的换行符使用Unix格式,不要使用Windows格式

10、没有必要增加若干空格来使某一行字符与上一行对应设置的字符对其

11、方法体内的执行语句组、变量的定义语句组、不同的业务逻辑之间或者不同放入语义直接插入一个空行,相同业务逻辑和语义之间不需要插入空行。