阿里云大学 关注
手机版

《阿里巴巴Java开发手册v1.4.0(详尽版)》更新,新增16条设计规约

  1. 云栖社区>
  2. 阿里云大学>
  3. 博客>
  4. 正文

《阿里巴巴Java开发手册v1.4.0(详尽版)》更新,新增16条设计规约

云木西 2017-02-08 17:01:38 浏览520450 评论160

摘要: 阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。

        -------------- 2018.6.6日更新 --------------

阿里巴巴Java开发手册v1.4.0(详尽版)发布,新增16条设计规约。设计规约是根据阿里巴巴实际项目架构经验提炼而成,主要从UML图和架构设计原则来规定比较基础的软件设计理念,并且明确了超过什么样的阈值需要以什么样的方式来呈现设计思维。


点击下载《阿里巴巴Java开发手册》v1.4.0(详尽版):https://yq.aliyun.com/attachment/download/?id=5585

编码规范考试认证:https://edu.aliyun.com/certification/cldt02

IDE插件下载:https://github.com/alibaba/p3c


代码的可读性是指代码让人容易阅读、理解、调试、可预料的程度。提高代码的可读性可以为代码阅读者节约时间和精力,提升团队协作效率。熟悉和遵守《阿里巴巴Java开发手册》的编程风格,那只是“标”,而代码可读性的“本”可以追溯到软件设计阶段。根据阿里巴巴内部的反馈声音来看,对于数据底层结构、状态图、以及敏捷开发相关的三条,共鸣感最强,那么详细点评一下。

1. 数据底层结构

底层数据结构属于大厦的地基工程,如果地基不稳,那么上层去修正难度是相当大的,甚至是无法修正。所以设计规约提倡,存储方案和底层数据结构的设计获得评审一致通过,并沉淀成为文档。有缺陷的底层数据结构容易导致系统风险高,可扩展性差,重构成本因历史数据迁移、系统平滑过渡也会陡然增加,所以,存储方案和数据结构需要认真地进行设计和评审,生产环境提交执行后,需要进行double check。评审内容包括存储介质选型、表结构设计能否满足技术方案、存取性能和存储空间能否满足业务发展、表或字段之间的辩证关系、字段名称、字段类型、索引等;数据结构变更(如在原有表中新增字段)也需要进行评审通过后上线。

2. 状态图

业务对象状态相关的编码错误是引起线上故障的一个重要导火索。多一个状态,少一个状态,如果没有历史设计文档沉淀,那么都是灾难性的。如果某个业务对象的状态超过3个,使用状态图来表达并且明确状态变化的各个触发条件。状态图的核心是对象状态,首先明确对象有多少种状态,然后明确两两状态之间是否存在直接转换关系,再明确触发状态转换的条件是什么。淘宝订单状态有已下单、待付款、已付款、待发货、已发货、已收货等。比如已下单与已收货这两种状态之间是不可能有直接转换关系的。

3. 敏捷开发

敏捷开发是当下流行的一种开发模式,相比传统软件生产流程,更加快速地交付。但是,敏捷开发适合于信任度好、理解力强、技术水平相对一致的创业型团队。但是在很多公司敏捷成为一个抓进度的拔苗助长式的借口。所以避免如下误解:敏捷开发 = 讲故事 + 编码 + 发布。敏捷开发是快速交付迭代可用的系统,省略多余的设计方案,摒弃传统的审批流程,但核心关键点上的必要设计和文档沉淀是需要的。


------------------------------------------

关于《阿里巴巴Java开发手册》


《阿里巴巴Java开发手册》是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程规约、设计规约等,这是近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善。这是阿里回馈给Java社区的一份礼物,希望能够帮助企业开发团队在Java开发上更高效、容错、有协作性,提高代码质量,降低项目维护成本。

阿里云大学结合《阿里巴巴Java开发手册》,推出了「阿里巴巴编码规范」认证,通过在线考试,检测你对手册中开发规范的掌握程度,并发放官方认证证书。立即考试:https://edu.aliyun.com/certification/cldt02 


你是否曾因Java代码规范版本纷杂而无所适从?

你是否想过代码规范能将系统故障率降低20%?

你是否曾因团队代码风格迥异而协同困难?

你是否正在review一些原本可以避免的故障?

你是否无法确定自己的代码足够健壮? 

码出高效,码出质量!

相比C++代码规范业界已经达成共识,Java代码规范业界比较混乱,我们期待这次发布的Java代码规范能够给业界带来一个标准,促使整体行业代码规范水平得到提高,最终能够帮助企业和开发者提升代码质量和降低代码故障率。

 

阿里出品,质量保证!

阿里Java技术团队一手打造出Dubbo、JStorm、Fastjson等诸多流行开源框架,部分已成为Apache基金会孵化项目;

阿里在Java后端领域支撑起全球访问量最大的服务器集群;

Java代码构建的阿里双11业务系统订单处理能力达到17.5万笔/秒;

到目前已累计数亿行高并发、高稳定性的最佳Java代码实践;

……

此次公开的Java开发手册正是出自这样的团队,近万名阿里Java技术精英的经验总结,并经历了多次大规模一线实战检验及完善,铸就了这本高含金量的阿里Java开发手册。该手册以Java开发者为中心视角,划分为编程规约、异常日志规约、MYSQL规约、工程规约、安全规约五大块,再根据内容特征,细分成若干二级子目录。根据约束力强弱和故障敏感性,规约依次分为强制、推荐、参考三大类。此套规范不仅能让代码一目了然, 更有助于加强团队分工与合作、真正提升效率。 


无规矩不成方圆 无规范不能协作

众所周知,制订交通法规表面上是要限制行车权,实际上是保障公众的人身安全。试想如果没有限速,没有红绿灯,没有规定靠右行驶,谁还敢上路行驶。 

同理,对软件来说,适当的规范和标准绝不是消灭代码内容的创造性、优雅性,而是限制过度个性化,以一种普遍认可的方式一起做事,降低故障率,提升协作效率。开发手册详细列举如何开发更加高效,更加容错,更加有协作性,力求知其然,更知其不然,结合正反例,提高代码质量。比如,异常日志处理时的各种不规范行为;集合转换的各种坑;创建线程池出现的等待队列OOM等。 


阿里技术资深大咖联袂推荐

阿里高级研究员多隆:工程师对于代码,一定要“精益求精”,不论从性能,还是简洁优雅,都要具备“精益求精”的工匠精神,认真打磨自己的作品。 

阿里研究员毕玄:一个优秀的工程师和一个普通工程师的区别,不是现在满天飞的架构图,他的功底就是体现在他写的每一行代码上。 

阿里研究员玄难:代码是软件工程里面的产品设计、系统架构设计等工作的最后承载体,代码的质量决定了一切工作的成败。 

阿里巴巴B2B事业群CTO李纯:好的软件产品离不开工程师高质量的代码及相互间顺畅的沟通与合作。简单,适用的代码规约背后所传递的是技术上的追求卓越、协同合作的精神,是每个技术团队不可缺失的重要利器。 

阿里研究员、HipHop作者:赵海平(花名:福贝):程序员是创造个性化作品的艺术家,但同时也是需要团队合作的工种。个性化应尽量表现在代码效率和算法方面,牺牲小我,成就大我。 


拥抱规范,远离伤害!

开发的同学们赶紧行动起来,遵守代码规范,你好,我好,大家好! 


关注云栖社区微信公众号:

2adbbb40545618044d6ebff62c513480e7591581

用云栖社区APP,舒服~

【云栖快讯】云栖社区技术交流群汇总,阿里巴巴技术专家及云栖社区专家等你加入互动,老铁,了解一下?  详情请点击

网友评论

41F
gao本

很好的东西,感谢这样有责任有担当的企业,只有这样整个社会才会快速进步

42F
raorihong

有没有php的呢?

43F
nick.yuan

真是受益匪浅

(来自社区APP)
44F
jiankangbeijing

只有正确实现了业务需求,并且符合架构设计的代码才能称之为优秀的活代码,否则即使写的再优雅也是死的!

(来自社区APP)
os 赞同
45F
小鬼谷子

阿里引领DT时代

(来自社区APP)
46F
她的小小猪

JQuery对象怎么命名啊?
我一般都是用$符号开头的

47F
星光似霰

学习了

48F
芝麻谷
  1. 【推荐】循环体内,字符串的联接方式,使用 StringBuilder 的 append 方法进行扩展。
    反例:

String str = "start";
for(int i=0; i<100; i++){
str = str + "hello";
}
说明:反编译出的字节码文件显示每次循环都会 new 出一个 StringBuilder 对象,然后进行
append 操作,最后通过 toString 方法返回 String 对象,造成内存资源浪费。

第十七条的这个说明说的是什么 为什么和反例对不上

一个人螃蟹

请问你工作多久了

一个人螃蟹

他的意思是让你看反编译的字节码分析jvm是如何处理的,正例赘述内容太多,不容易说明问题,反正我是看懂了

评论
49F
芝麻谷

我也推荐谷歌的规范

50F
jeeklin

哇哈哈

51F
cap丨jacv

好像很牛,我刚学Java.有帮助吗?

(来自社区APP)
52F
小克思

做标杆了!

53F
starstar998

顶起

54F
tianwei02

不够全,还不如我们公司的规范手册。

比如我们公司规定:
1、代码单行不允许超过整个屏幕的一半,方便垂直拆分视图阅读。
2、方法的名词和动词需要有约束,比如 “删除用户”是一个动词,是可以作为方法名。若当前类是“用户”,是方法直接写成“删除”而不需要携带“用户”。再比如,事件名称,过去式和进行时是有区别的,同时需要名词在前动词在后。比如 UserDeleted 和 UserDeleting 的关系。
诸如此类,希望再接再厉继续补充哈。。。

糗蛋网tianwei02 赞同
55F
scruel

请问阿里的大佬们啊,能不能在更新的时候标注下更新了具体那些内容啊?方便以前看过文档的人校对~

孤尽

在下载的PDF版本最后的附1,详细说明了当前版本的更新点。

scruel

好的谢谢!

评论
56F
tiankonghewo

必须支持,先看一遍再说

57F
chengning

赞,看似基础,实则值得细细品味!

58F
初心永恒1

很好,赞一个

59F
neo.he

在规范中倡导的前提下,为什么还不提倡用可变参数编程,毕竟入参的时候写起来更加简洁,不用区分是数组还是可预知的参数个数

孤尽

只是不提倡,如果满天飞的可变参数,对写是舒服,对维护的人来说是一件头疼的事情。

评论
60F
东方太阳☀

半路出家的小白,有没有大腿抱抱。

(来自社区APP)
云木西
文章74篇 | 关注807
关注
大数据开发套件(Data IDE),提供可视化开发界面、离线任务调度运维、快速数据集成、多人... 查看详情
一站式提供企业即时通讯、销售管理、协同办公。 查看详情
超过10,000,000域名在这里注册 查看详情
为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效... 查看详情
阿里中间件云大使

阿里中间件云大使