阿里JAVA编码规范手册Word编辑.doc
《阿里JAVA编码规范手册Word编辑.doc》由会员分享,可在线阅读,更多相关《阿里JAVA编码规范手册Word编辑.doc(37页珍藏版)》请在三一文库上搜索。
1、传播优秀Word版文档 ,希望对您有帮助,可双击去除! 传播优秀Word版文档 ,希望对您有帮助,可双击去除! 目录前言.1一、编程规约.2(一) 命名规约 .2(二) 常量定义 .4(三) 格式规约 .5(四) OOP规约 .7(五) 集合处理 .11(六) 并发处理 .13(七) 控制语句 .16(八) 注释规约 .17(九) 其它.18二、异常日志.20(一) 异常处理 .20(二) 日志规约 .21三、MySQL规约.23(一) 建表规约 .23(二) 索引规约 .25(三) SQL规约 .27(四) ORM规约 .28四、工程规约.29(一) 应用分层 .29(二) 二方库规约.30
2、三) 服务器规约.32五、安全规约.33附 1:版本历史 .34附 2:本规约专有名词.34附 3:法律声明 .34(注:全文浏览时请使用 PDF左侧导航栏)传播优秀Word版文档 ,希望对您有帮助,可双击去除! 阿里巴巴 Java开发手册前言阿里巴巴 Java开发手册是阿里巴巴集团技术团队的集体经验总结,经历了多次大规模一线实战的检验及不断的完善,反馈给广大开发者。现代软件行业的高速发展对于开发者的综合素质要求越来越高,因为不仅是编程知识点,其它维度的知识点也会影响到软件的最终交付质量。比如:数据库的表结构和索引设计缺陷可能带来软件上的架构缺陷或性能风险;工程结构混乱导致维护困难;没有鉴权
3、的漏洞代码被黑客攻击等等。所以本手册以 Java开发者为中心视角,划分为编程规约、异常日志规约、MySQL规约、工程规约、安全规约五大块,再根据内容特征,细分成若干二级子目录。根据约束力强弱及故障敏感性,规约依次分为强制、推荐、参考三大类。对于规约里的内容,“说明”对内容做了引申和解释;“正例”提倡什么样的编码和实现方式;“反例”说明需要提防的雷区,以及真实的错误案例。本手册的愿景是码出质量、码出高效。代码的字里行间流淌的是软件生命中的血液,质量的提升是尽可能少踩坑,杜绝踩重复的坑,切实提升质量意识。另外,现代软件架构都需要协同开发完成,高效考虑的是降低协同成本,所谓无规矩不成方圆,无规范不能
4、协作。众所周知,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全。试想如果没有限速,没有红绿灯,没有规定靠右行驶,谁还敢上路行驶。对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的统一方式一起做事,提升协作效率。阿里巴巴 Java开发手册,开放包容地认真总结社区、博客、论坛的反馈,及时修正,保持与时俱进。请关注手册末页的“阿里技术”和“云栖社区”公众号获取最新版。禁止用于商业用途,违者必究1 / 37传播优秀Word版文档 ,希望对您有帮助,可双击去除! 阿里巴巴 Java开发手册Java开发手册版本号制定团队更新日期备注1.1.0
5、阿里巴巴集团技术团队2017.2.27增加前言和专有名词说明,修正部分描述。一、编程规约(一)命名规约1.【强制】 代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。反例: _name / _name / $Object / name_ / name$ / Object$2.【强制】 代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。说明:正确的英文拼写和语法可以让阅读者易于理解,避免歧义。注意,即使纯拼音命名方式也要避免采用。反例: DaZhePromotion 打折 / getPingfenByName() 评分 / int 某变量 = 3正例:
6、alibaba / taobao / youku / hangzhou 等国际通用的名称,可视同英文。3.【强制】类名使用 UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:(领域模型的相关命名)DO / BO / DTO / VO等。正例:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion反例:macroPolo / UserDo / XMLService / TCPUDPDeal / TAPromotion4.【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase风格,必须遵从驼
7、峰形式。正例: localValue / getHttpMessage() / inputUserId5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。正例: MAX_STOCK_COUNT反例: MAX_COUNT6.【强制】抽象类命名使用 Abstract或 Base开头;异常类命名使用 Exception结尾;测试类命名以它要测试的类的名称开始,以 Test结尾。7.【强制】中括号是数组类型的一部分,数组定义如下:String args;反例:使用 String args的方式来定义。禁止用于商业用途,违者必究2 / 37传播优秀Word版文档 ,希望
8、对您有帮助,可双击去除! 阿里巴巴 Java开发手册8.【强制】POJO类中布尔类型的变量,都不要加 is,否则部分框架解析会引起序列化错误。反例:定义为基本数据类型 Boolean isSuccess;的属性,它的方法也是 isSuccess(),RPC框架在反向解析的时候,“以为”对应的属性名称是 success,导致属性获取不到,进而抛出异常。9.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用单数形式,但是类名如果有复数含义,类名可以使用复数形式。正例: 应用工具类包名为 com.alibaba.open.util、类名为 MessageUtils(此
9、规则参考spring的框架结构)10.【强制】杜绝完全不规范的缩写,避免望文不知义。反例: AbstractClass“缩写”命名成 AbsClass;condition“缩写”命名成 condi,此类随意缩写严重降低了代码的可阅读性。11.【推荐】如果使用到了设计模式,建议在类名中体现出具体模式。说明:将设计模式体现在名字中,有利于阅读者快速理解架构设计思想。正例:public class OrderFactory;public class LoginProxy;public class ResourceObserver;12.【推荐】接口类中的方法和属性不要加任何修饰符号(public 也
10、不要加),保持代码的简洁性,并加上有效的 Javadoc注释。尽量不要在接口里定义变量,如果一定要定义变量,肯定是与接口方法相关,并且是整个应用的基础常量。正例:接口方法签名:void f();接口基础常量表示:String COMPANY = alibaba;反例:接口方法定义:public abstract void f();说明:JDK8中接口允许有默认实现,那么这个 default方法,是对所有实现类都有价值的默认实现。13.接口和实现类的命名有两套规则:1)【强制】对于 Service和 DAO类,基于 SOA的理念,暴露出来的服务一定是接口,内部的实现类用 Impl的后缀与接口区别
11、正例:CacheServiceImpl实现 CacheService接口。2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是able的形式)。正例:AbstractTranslator实现 Translatable。14.【参考】枚举类名建议带上 Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。正例:枚举名字:DealStatusEnum,成员名称:SUCCESS / UNKOWN_REASON。禁止用于商业用途,违者必究3 / 37传播优秀Word版文档 ,希望对您有帮助,可双击去除! 阿里巴巴 Jav
12、a开发手册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的
13、统称,禁止命名成 xxxPOJO。(二)常量定义1.【强制】不允许出现任何魔法值(即未经定义的常量)直接出现在代码中。反例: String key = Id#taobao_+tradeId;cache.put(key, value);2.【强制】long或者 Long初始赋值时,必须使用大写的 L,不能是小写的 l,小写容易跟数字1混淆,造成误解。说明:Long a = 2l; 写的是数字的 21,还是 Long型的 2?3.【推荐】不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存相关的常量放在类:CacheConsts下;系统配置相关的常量放在类:ConfigCon
14、sts下。说明:大而全的常量类,非得使用查找功能才能定位到修改的常量,不利于理解和维护。4.【推荐】常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。1) 跨应用共享常量:放置在二方库中,通常是 client.jar中的 constant目录下。2) 应用内共享常量:放置在一方库的 modules中的 constant目录下。反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示“是”的变量:类 A中:public static final String YES = yes;类 B中:public static fina
15、l String YES = y;A.YES.equals(B.YES),预期是 true,但实际返回为 false,导致产生线上问题。禁止用于商业用途,违者必究4 / 37传播优秀Word版文档 ,希望对您有帮助,可双击去除! 阿里巴巴 Java开发手册3) 子工程内部共享常量:即在当前子工程的 constant目录下。4) 包内共享常量:即在当前包下单独的 constant目录下。5) 类内共享常量:直接在类内部 private static final定义。5.【推荐】如果变量值仅在一个范围内变化用 Enum类。如果还带有名称之外的延伸属性,必须使用 Enum类,下面正例中的数字就是延伸
16、信息,表示星期几。正例:public EnumMONDAY(1), TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5),SATURDAY(6),SUNDAY(7);(三)格式规约1.【强制】大括号的使用约定。如果是大括号内为空,则简洁地写成即可,不需要换行;如果是非空代码块则:1) 左大括号前不换行。2) 左大括号后换行。3) 右大括号前换行。4) 右大括号后还有 else等代码则不换行;表示终止右大括号后必须换行。2.【强制】 左括号和后一个字符之间不出现空格;同样,右括号和前一个字符之间也不出现空格。详见第 5条下方正例提示。3.【强制】if/for
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 阿里 JAVA 编码 规范 手册 Word 编辑
