阿里云大学 关注
手机版

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

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

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

云木西 2017-02-08 17:01:38 浏览563034 评论165

摘要: 阿里巴巴集团推出的《阿里巴巴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

【云栖快讯】阿里云栖开发者沙龙(Java技术专场)火热来袭!快来报名参与吧!  详情请点击

网友评论

1F
屏峰远望

可以当一个尺子了,量一下团队的代码质量~

dadadadadada

规范而已,很多时候不能代表代码质量

raorihong

厉害了

贾人rusher

第26页的ORM规约,不允许直接拿HashMap或者Hashtable作为查询结果集的输出是什么意思??sql查询出来的结果不是很多都是map了吗?

屏峰远望

如果不写对应的Class或者resultMap,那么可以直接通过Hashmap或者hashtable直接置入,虽然省事,但是会带来一些未知的数据转化问题。

孤尽

外部团队可以直接使用,或者在此基础上进行修订后公司内部使用。

铎铎哥哥

@贾人rusher 可操作性查

管局审查员

一流公司制定规范,二流公司申请专利,三流公司生产产品。

anxiety

@管局审查员 似曾相识的一句话

斯诺李

@孤尽 当产生多个版本之后,由于「编码规范」由一些「必须」「建议」的语句组成,也许可以用 道义逻辑 的方法做些研究

爱与杀戮
  1. 【强制】if/for/while/switch/do 等保留字与括号之间都必须加空格。不应叫做保留字,而是关键字。
linchang20

借楼
文档第三页,第4点,第2小点:反例:易懂变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了表示
“是”的变量:
两位攻城师,应为两位工程师; 表示“是”的变量 注:此处应为“常量”。请更正,谢谢。
影响深远的技术类文档应措辞严谨,谢谢。

1309316280376633

放在github上或者开源的版本管理托管的网上不好吗?
这样有更新能及时追踪到

jeffyding

请问插件如何安装在MyEclipse?我安装上但是没有显示,Eclipse版本可以正常使用

1387803371302845

很好,很受用!

283913952137600721

赞一个。

评论
2F
wang15959099

真心不错!

3F
想想念念

很不错,对大规模应用java的团队很有指导意义

4F
司徒阿仔

棒,推荐给项目组成员

呵呵呵x

wad

小嫣师妹

我是新人,多多指教。

评论
5F
云栖徒骇

你好,我好,大家好!

6F
snowdream86

火钳留名

7F
modprobe

8F
jimbray

下来学习一下

9F
司彦涛

有python的手册没

(来自社区APP)
10F
板溪

集合中的:
12.【参考】合理利用好集合的有序性(sort)和稳定性(order),避免集合的无序性(unsort)和 不稳定性(unorder)带来的负面影响。 说明:稳定性指集合每次遍历的元素次序是一定的。有序性是指遍历的结果是按某种比较规则 依次排列的。如:ArrayList 是 order/unsort;HashMap 是 unorder/unsort;TreeSet 是 order/sort。

这里有关 ArrayList 和 TreeSet 的说明感觉弄反了.

mrclass

并不反,这里的有序说的是对象在集合中存放时是否会排序,不是存数据时的顺序。

kimi_xxd

领教,概念弄清楚很重要,有时候两个程序员将技术问题就像鸡与鸭的交流,都是基于自己的理解,规范的意义不仅在于提升代码质量和可以管理大规模代码,还在于给团队成员一个交流的统一语言,使沟通更更顺畅。

评论
11F
wendal

还好意思提dubbo,早就停更了

努力努力!依旧西卡 赞同
initiate

这么多人用,怎么不能提?

jackchang.sz

现在又捡起来了,不过很多人转向了

咕咔咔噜

不错

评论
12F
ccfdd

10.【推荐】使用CountDownLatch进行异步转同步操作,每个线程退出前必须调用countDown方 法,线程执行代码注意catch异常,确保countDown方法可以执行,避免主线程无法执行至countDown方法,直到超时才返回结果。

这里写错了应该改成 避免主线程无法执行至await方法,直到超时才返回结果。

gao本1676582893221743wyes 赞同
屏峰远望

现在最新版本是v1.0.2版本,此问题在1.0.1中已经修正,感谢提的反馈。

评论
13F
周梦康

加油

14F
淘实惠

不错

15F
wangkaimin

拜读

16F
hyhcgwq

多谢~

17F
casxter

学习中!

18F
玖伍贰柒

阿里的项目开源完就不管了

(来自社区APP)
19F
许工

好东西

(来自社区APP)
20F
wuyc

😊昨晚刚在找这方面的资料,挺好的。
在这里,我推荐其它语言的规范(来自Google项目)https://google.github.io/styleguide/

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

阿里云总监课正式启航