1、命名规约
(1)类名
- 类名使用 UpperCamelCase 风格,但DO / BO / DTO / VO等领域模型相关的命名例外;
- 正例:UserDO / XmlService / TcpUdpDeal / TaPromotion
(2)方法名、参数名、成员变量、局部变量
- 方法名、参数名、成员变量、局部变量统一使用lowerCamelCase 风格;
(3)抽象类、异常类、测试类
- 抽象类命名以Abstract 或 Base 开头;
- 异常类命名使用 Exception 结尾;
- 测试类命名以它要测试的类的名称开始,以 Test 结尾;
(4)POJO类中的布尔类型变量
- POJO 类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误;
- 如:定义为基本数据类型boolean isSuccess;的属性,它的方法也是isSuccess(),RPC 框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常;
(5)包名
- 包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词;
- 包名统一使用单数形式(类名如果有复数含义,可以用复数形式);
(6)接口
- 如果是形容能力的接口,取对应的形容词(通常是-able)命名;
- 接口中的方法和属性不要加任何修饰符号(接口中的方法默认是public abstract,接口中的变量默认是public static final);
(7)枚举类
- 枚举类命名建议加上ENUM后缀;
- 枚举成员名称需要全部大写,单词间用下划线隔开;
(8)Service/DAO层方法
- 获取单个对应的方法用get前缀;
- 获取多个对象的方法用list前缀;
- 获取统计值的方法用count前缀;
- 插入方法用save/insert前缀;
- 删除方法用remove/delete前缀;
- 修改方法用update前缀;
(9)领域模型
- 数据对象:xxxDO,其中xxx为数据表名;
- 数据传输对象:xxxDTO,其中xxx为业务领域相关的名称;
- 展示对象:xxxVO,其中xxx一般为网页名称;
- POJO是DO/DTO/BO/VO的统称,禁止命名成xxx POJO;
2、常量定义
(1)魔法值
- 不允许出现任何魔法值;
- 魔法值:即未经定义的常量;
- 反例:
String key="Id#taobao_"+tradeId;
(2)long/Long赋初始值
- 赋初始值时,使用大写L,而非小写l,小写容易与数字1混淆;
(3)常量归类维护
- 不要使用一个大而全的常量类维护所有的常量,应该按照功能进行分类维护;
- 如:系统配置相关的常量放在类ConfigConsts下;
(4)常量复用分层
- 常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量;
- 跨应用共享常量:放在二方库中的constant目录下;
- 应用内共享常量:放在一方库中的modules中的constant目录下(如util模块下的constant目录);
- 子工程内部共享常量:放在当前子工程的constant目录下;
- 包内共享常量:放在当前包下单独的constant目录下;
- 类内共享常量:直接在类内部private static final定义;
3、格式规约
(1)运算符
- 任何运算符左右必须加一个空格;
- 运算符包括赋值运算符=、逻辑运算符、加减乘除符号、三目运行符等;
(2)换行
- 单行字符数限制不超过 120 个,超出需要换行;
- 运算符与下文一起换行;
- 方法调用的点符号与下文一起换行;
- 在多个参数超长,逗号后进行换行;
- 在括号前不要换行;
(3)缩进
- 缩进采用4个空格;
(4)方法参数
- 方法参数在定义和传入时,多个参数逗号后边必须加空格;