1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。这两个符号有特殊用途,代理类等~
反例:_name/__name/$Object/name_/name$/Object$
2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。
正例:alibaba/taobao/youku/hangzhou 等国际通用的名称,可视同英文。
反例:DaZhePromotion[打折]/getPingfenByName()[评分]/int 某变量 = 3
3.【强制】类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO/BO/DTO/VO/AO
正例:MarcoPolo/UserDO/XmlService/TcpUdpDeal/TaPromotion
反例:macroPolo/UserDo/XMLService/TCPUDPDeal/TAPromotion
4.【强制】方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格,必须遵从驼峰形式。
正例:localValue/getHttpMessage()/inputUserId
5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
正例:MAX_STOCK_COUNT
反例:MAX_COUNT
6.【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类命名以它要测试的类的名称开始,以Test结尾。
7.【强制】中括号是数组类型的一部分,数组定义如下:String[] args;
反例:使用 String args[]的方式来定义。
8.【强制】POJO 类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。
反例:定义为基本数据类型Boolean isDeleted;的属性,它的方法也是isDeleted(),RPC框架在反向解析的时候,"以为"对应的属性名称是deleted,导致属性获取不到,进而抛出异常。
9.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。
正例:应用工具类包名为 com.alibaba.open.util、类名为MessageUtils(此规则参考spring 的框架结构)
10.【强制】杜绝完全不规范的缩写,避免望文不知义。
反例:AbstractClass"缩写"命名成 AbsClass;condition"缩写" 命名成condi,此类随意缩写严重降低了代码的可阅读性。
11.【推荐】如果使用到了设计模式,建议在类名中体现出具体模式。
说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。
正例:public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;
12.【推荐】接口类中的方法和属性不要加任何修饰符号(public也不要加),保持代码的简洁性,并加上有效的Javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。
正例:接口方法签名:void f();
接口基础常量表示: String COMPANY = "alibaba";
反例:接口方法定义: public abstract void f();
说明:JDK8中接口允许有默认实现,那么这个default方法,是对所有实现类都有价值的默认实现。
13.接口和实现类的命名有两套规则:
1)【强制】对于Service和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl的后缀与接口区别。
正例:CacheServiceImpl实现CacheService接口。
2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是–able 的形式)。
正例: AbstractTranslator 实现 Translatable。
14.【参考】枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。
说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。
正例:枚举名字: DealStatusEnum, 成员名称: SUCCESS / UNKOWN_REASON。
15. 【参考】各层命名规约:
A) Service/DAO 层方法命名规约
1) 获取单个对象的方法用 get 做前缀。
2) 获取多个对象的方法用 list 做前缀。
3) 获取统计值的方法用 count 做前缀。
4) 插入的方法用 save(推荐) 或 insert 做前缀。
5) 删除的方法用 remove(推荐) 或 delete 做前缀。
6) 修改的方法用 update 做前缀。
B) 领域模型命名规约
1) 数据对象: xxxDO, xxx 即为数据表名。
2) 数据传输对象: xxxDTO, xxx 为业务领域相关的名称。
3) 展示对象: xxxVO, xxx 一般为网页名称。
4) POJO 是 DO/DTO/BO/VO 的统称,禁止命名成 xxxPOJO。
阿里巴巴Java 开发手册编程规约之命名风格
时间: 2024-12-14 22:23:14
阿里巴巴Java 开发手册编程规约之命名风格的相关文章
阿里巴巴Java 开发手册编程规约之异常日志
(一)异常处理1. [强制]Java 类库中定义的一类 RuntimeException 可以通过预先检查进行规避,而不应该通过 catch 来处理,比如: IndexOutOfBoundsException, NullPointerException 等等.说明: 无法通过预检查的异常除外,如在解析一个外部传来的字符串形式数字时,通过 catchNumberFormatException 来实现.正例: if (obj != null) {...}反例: try { obj.method()
阿里巴巴Java 开发手册编程规约之工程结构
(一)应用分层1. [推荐]图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层:可直接封装 Service 方法暴露成 RPC 接口: 通过 Web 封装成 http 接口: 进行网关安全控制. 流量控制等.终端显示层:各个端的模板渲染并执行显示的层. 当前主要是 velocity 渲染, JS 渲染,JSP 渲染,移动端展示等.Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简
阿里巴巴Java 开发手册编程规约之MySQL 数据库
(一)建表规约1. [强制]表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint(1 表示是, 0 表示否) .说明: 任何字段如果为非负数,必须是 unsigned.正例: 表达逻辑删除的字段名 is_deleted, 1 表示删除, 0 表示未删除.2. [强制]表名.字段名必须使用小写字母或数字, 禁止出现数字开头,禁止两个下划线中间只出现数字.数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑.正例: getter_
阿里巴巴Java 开发手册编程规约之OOP规约
1. [强制]避免通过一个类的对象引用访问此类的静态变量或静态方法,无谓增加编译器解析成本,直接用类名来访问即可.2. [强制]所有的覆写方法,必须加@Override 注解.说明: getObject()与 get0bject()的问题.一个是字母的 O,一个是数字的 0,加@Override可以准确判断是否覆盖成功.另外,如果在抽象类中对方法签名进行修改,其实现类会马上编译报错.3. [强制] 相同参数类型,相同业务含义,才可以使用 Java 的可变参数,避免使用 Object.说明: 可变
阿里巴巴Java 开发手册编程规约之并发处理
1. [强制] 获取单例对象需要保证线程安全,其中的方法也要保证线程安全.说明: 资源驱动类.工具类.单例工厂类都需要注意. 2. [强制]创建线程或线程池时请指定有意义的线程名称,方便出错时回溯. 正例: public class TimerTaskThread extends Thread { public TimerTaskThread() { super.setName("TimerTaskThread"); ... } 3. [强制]线程资源必须通过线程池提供,不允许在应用中
阿里巴巴Java 开发手册编程规约之控制语句
1. [强制]在一个 switch 块内,每个 case 要么通过 break/return 等来终止,要么注释说明程序将继续执行到哪一个 case 为止: 在一个 switch 块内,都必须包含一个 default 语句并且放在最后,即使它什么代码也没有.2. [强制]在 if/else/for/while/do 语句中必须使用大括号. 即使只有一行代码,避免使用单行的形式: if (condition) statements;3. [推荐] 表达异常的分支时, 少用 if-else 方式,
阿里巴巴Java 开发手册编程规约之注释规约
1. [强制]类.类属性.类方法的注释必须使用 Javadoc 规范,使用/**内容*/格式,不得使用//xxx 方式.说明: 在 IDE 编辑窗口中, Javadoc 方式会提示相关注释,生成 Javadoc 可以正确输出相应注释: 在 IDE 中,工程调用方法时,不进入方法即可悬浮提示方法.参数.返回值的意义,提高阅读效率. 2. [强制]所有的抽象方法(包括接口中的方法) 必须要用 Javadoc 注释.除了返回值.参数.异常说明外,还必须指出该方法做什么事情,实现什么功能.说明: 对子类
阿里巴巴Java 开发手册编程规约之集合处理
1. [强制] 关于 hashCode 和 equals 的处理,遵循如下规则:1) 只要重写 equals,就必须重写 hashCode.2) 因为 Set 存储的是不重复的对象,依据 hashCode 和 equals 进行判断,所以 Set 存储的对象必须重写这两个方法.3) 如果自定义对象做为 Map 的键,那么必须重写 hashCode 和 equals.说明: String 重写了 hashCode 和 equals 方法,所以我们可以非常愉快地使用 String 对象作为 key
阿里巴巴Java 开发手册编程规约之常量定义
1. [强制]不允许任何魔法值(即未经定义的常量) 直接出现在代码中.反例: String key = "Id#taobao_" + tradeId;cache.put(key, value);2. [强制] long 或者 Long 初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字1 混淆,造成误解.说明: Long a = 2l; 写的是数字的 21,还是 Long 型的 2?3. [推荐]不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护.如:缓存相