您的位置:首页 > 编程语言 > Java开发

[置顶] 阿里巴巴Java开发手册学习小结1-命名及常量定义

2017-12-06 17:15 411 查看
本次学习 来源 阿里巴巴Java开发手册 ,文档更新时间2016.12.7 是阿里巴巴集团技术部 首次向Java业界公开,如果有需要开发手册源文档的,欢迎联系

编程规约

命名规约

1.【强制】所有编程相关命名均不能以下划线或者美元符号 开始,也不能以下划线或美元符号结束

反例:
_name / __name / $Object / name_ / name$ /Object$


2.【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使存拼音命名方式也要避免使用。

反例:
DaZhePromotion [打折] / getPingfenByName [评分] / int 变量 = 3


正例:
ali/ alibaba /taobao/ cainiao/aliyun/youku/hangzhou
等国际通用的名称 ,可视为中文。

3.【强制】类名使用
UpperCamelCase
风格,必须遵从驼峰形式,但以下情形例外(领域模型的相关命名)
DO /DTO /VO /DAO


正例:
MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion


反例:
maroPolo / 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, 否则部分框架解析会引起序列化错误

说明:POJO 类指的就是 那些JavaBean 类

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

正例:应用工具类包名 为
com.alibaba.mpp.util
、类名为MessageUtils (此规则参考spring 的框架结构)

10.【强制】杜绝完全不规范的缩写,避免望文生义。

反例:
某业务代码 AbstractClass 缩写为AbsClass condition 缩写命名为 condi ,此类随意缩写严重降低了代码的可阅读性


11.【推荐】如果使用到了设计模式,建议在类名中体现出具体的设计模式。

说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想

正例:
public class OrderFactory;

public  class LoginProxy;

public class ResourceObserver;


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

正例:
接口方法签名 void  f();

接口基础常量表示 String COMPNY =“alibaba


反例:接口方法定义
public abstract void f();


说明:JDK8 中,接口允许有默认实现,那么这个default 方法,是对所有实现类都有价值的默认实现。

13.接口 和实现类的命名有两套规则:

1)【强制】对于Service 和DAO类,基于SOA的理念,暴露出来的服务一定是接口,内部的实现类用Impl 的后缀 与接口区别。

正例:
CacheServiceImpl 实现 CacheService 接口


2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是 -able 的形式)

正例:
AbstractTranslator 实现 Translatable


14【参考】枚举类 建议带上Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。

说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。

正例:
枚举名称  DealStatusEnmu;成员名称 SUCESS / 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

常量定义

1.【强制】不允许出现任何魔法值(即未定义的常量)直接出现在代码中

反例:
String key = "Id#taobao_"+tradeId;

cache.put( key, value );


2.【强制】long 或者Long 初始赋值时,必须使用大写的L,不能是小写的l,小写容易跟数字1 混淆,造成误解。

说明 :
Long a = 2l; 要写成 Long a = 2L;


3.【推荐】不要使用一个常量类维护所有的常量,应该按照常量功能进行归类,分开维护,

如 缓存相关的常量放在类 :CacheConsts 下,系统配置相关的常量放在类 ConfigConsts下。

说明:大而全的常量类,非得 ctrl +f 才能定位到修改的常量,不利于理解,也不利于维护。

4.【推荐】如果变量值仅在一个范围内变化用Enum类。如果还带有名称之外的延伸属性,必须使用Enum类,下面正例中的数字就是延伸信息,表示星期几。

正例:
public Enum{ MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5),             SATURDAY(6), SUNDAY(7); }
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: