1. 聚能聊>
  2. 话题详情

阿里Java规范再次刷新代码规范认知,新增的16条设计规约你了解吗?

就在前不久,火热进行的 “向代码致敬,寻找你的第83行” 活动中参与人数众多,各位程序员纷纷晒出自己的规范代码,一绝高下,最终经过激烈角逐选出了两位高手盲人程序员蔡永斌和高中生青藤木子,然而这些代码的规范性评定标准就是《阿里巴巴Java开发手册》,它是阿里内部Java工程师所遵循的开发规范,涵盖编程规约、单元测试规约、异常日志规约、MySQL规约、工程规约、安全规约等,这是近万名阿里Java技术精英的经验总结。

2018年6月5日,《阿里巴巴Java开发手册》再次刷新代码规范认知,新增了16条设计规约!

何为16条?

设计规约是根据阿里巴巴实际项目架构经验提炼而成,共16条。设计规约主要从UML图和架构设计原则来规定比较基础的软件设计理念,并且明确了超过什么样的阈值需要以什么样的方式来呈现设计思维。根据阿里巴巴内部的反馈声音来看,对于数据底层结构、状态图、以及敏捷开发相关的三条,共鸣感最强,那么详细点评一下:

数据底层结构

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

状态图

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

敏捷开发

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

传送门

《阿里巴巴Java开发手册》(详尽版)免费下载链接!

我们聊聊吧!

你了解过《阿里巴巴Java开发手册》吗?能否评价下。
你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
你觉得Java编码规范存在的意义是什么?
参与话题

奖品区域 活动规则 已 结束

  • 奖品一

    云栖定制电脑包 x 2

  • 奖品二

    云栖定制鼠标垫 x 3

  • 奖品三

    阿里云代金券 x 3

68个回答

6

关羽大侠 复制链接去分享

看完后,功力提升10年,但是有两处不知道是不是故意写错的,工程师写成攻城师,甬道写成泳道,还有个人觉得没必要采用NPE、OOM此类的简称,遇到时还要先在脑海里翻译成全称,增加阅读难度。
阿里的编码规范太绝对了,像switch中每个case需要通过break/return等来终止 ,如果switch放在for循环里面,有些case就需要用continue来跳过本次循环,继续下个循环。
screenshot

关羽大侠 回复

想要电脑包

评论
1

微wx笑 已获得云栖定制电脑包 复制链接去分享

你了解过《阿里巴巴Java开发手册》吗?能否评价下。
很不错的指南

你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
做 为小白的我,哪一条都受益匪浅好么!

你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
我只是个搬砖的。

你觉得Java编码规范存在的意义是什么?
1、好的编码规范可以尽可能的减少一个软件的维护成本,并且几乎没有任何一个软件,在其整个生命周期中,均由最初的开发人员来维护;
2、好的编码规范可以改善软件的可读性,可以让开发人员尽快而彻底地理解新的代码;
3、好的编码规范可以最大限度的提高团队开发的合作效率;
4、长期的规范性编码还可以让开发人员养成好的编码习惯,甚至锻炼出更加严谨的思维;

0

jmctian 已获得云栖定制电脑包 复制链接去分享

如果有相应的配套工具能够提供规范检查就好了。很多时候通过人工的方式工作量比较大,习惯的养成也需要时间。

孤尽 回复

github.com/alibaba/p3c/

jmctian 回复

十分感谢!

评论
0

雷侠 已获得阿里云代金券 复制链接去分享

你了解过《阿里巴巴Java开发手册》吗?能否评价下。
了解过,看过好几遍,最近去github上看到了详尽版。比之前的终极版,纪念版要多几条经验。
说实话,受益很大从不规范到规范。
规范的写代码已成为习惯。

你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
全都受益匪浅,特别是对我这种小白。
从命名规范开始到设计规约每一条都很有帮助。

你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
如果可以,我希望能多一些关于数据库的规范和经验。
作为一名Java开发者,但是数据库方面的知识却是很弱。

你觉得Java编码规范存在的意义是什么?
没有规矩,不成方圆。
去约束大家,让大家按照规范来开发,不是很好吗?
别人接手你的代码时候,起码不用花大量的时间去理解你这个方法是干嘛的,变量名是什么意思。

孤尽 回复

感谢你如此支持阿里巴巴JAVA开发手册,我们用心酿好酒的心态来推动中国代码规约文化的进步。

评论
0

浮生递归 已获得阿里云代金券 复制链接去分享

差点看成两位盲人高手……

你了解过《阿里巴巴Java开发手册》吗?能否评价下。
从一开始就有关注。包括2017年杭州云栖大会上的答题赢手册活动,还玩了很久,终于以一个门外汉的水平,成功拿到了80分去领奖。然而,去晚了,没货了……可见这手册的火热程度。后来向单位同事也推荐了这东西,同事感觉不错。有个同事还准备在内部学习会上跟大家分享。

你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
都挺不错的吧,反正每次我在命名的时候,都会想起这手册的内容,然后就是不停的提醒自己,命名也要规范,虽然输入速度下降了不少,但是回顾的时候,真是方便多了。

你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
这个只能由java大神来出手了,毕竟规范这些很容易出现争议,要不是有多年的经验,经过各方面的利益权衡,不敢随便去定什么规约。比较典型的就是用tab还是用空格来缩进,都争吵了这么多年了。

你觉得Java编码规范存在的意义是什么?
跟其他业界标准的统一是一样的。提高行业整体生产力。

0

aoteman675 已获得阿里云代金券 复制链接去分享

1、你了解过《阿里巴巴Java开发手册》吗?能否评价下。
看过几遍了,收益匪浅的是命名规范,哈哈哈,做项目的时候,成员可能来自不同的公司,都是各自用约定成俗的命名规则,最后啥风格都会有,更新迭代成本极高,效率低。
2、你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
全部都是,编程规约影响更大,虽然在浩瀚的代码库里几条规范代码不起眼,但是规约的代码和没有规约的代码效率是不一样的,异常处理和可维护也不一样。
3、你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
框架设计多一些就好了。
4、你觉得Java编码规范存在的意义是什么?
规范程序员养成好习惯,缩短项目周期和减少维护成本。减少Bug,少掉头发。

0

海阔天空yy 已获得云栖定制鼠标垫 复制链接去分享

你了解过《阿里巴巴Java开发手册》吗?能否评价下。
看过,感觉写的相当全面,不是那种只是简单的定义一下,看出来是有深厚的技术功底才能写的出来的规范。
他不仅仅是告诉你应该这样做,而且还告诉你为什么要这样做,为了避免什么问题,给了你很好的解释。
你甚至可以把它当成技术文档。
你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
看过之后感觉很多条经验都受益匪浅,比如关于日志的,关于数据库索引的,
你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
最好增加关于spring使用的 还有一些开发框架使用方面的,像mybatis的
毕竟这些比较火的框架,有种各样的有法,但那种更好,或怎么用能做好少bug而多功能。

你觉得Java编码规范存在的意义是什么?
通过前人总结出来的优秀经验,你有点像你站在巨人的肩膀上,简单的说起跑线就不一样了,你能规避很多问题,也可以学到很多知识

0

1267883427832888 已获得云栖定制鼠标垫 复制链接去分享

我们部门老大在部门里推荐,规约既是约定自我,也是约定团队的好方法。

0

dongdongfu 已获得云栖定制鼠标垫 复制链接去分享

你了解过《阿里巴巴Java开发手册》吗?能否评价下。
读过,手册写的规范,从代码到命名等等,非常好,根据阿里多年总结出来的,有些情况下,群里讨论出现冲突的时候,都会来一句,不信你参考阿里java开发者手册,可想而知影响程度。

你觉得《阿里巴巴Java开发手册》有哪条经验让你受益匪浅?
印象最深刻的就是这条,禁止使用存储过程!!!

你觉得《阿里巴巴Java开发手册》还有哪些需要补充的吗?
补充的话,也需要阿里开发人员根据实际情况慢慢修改了,满足阿里大厂子的需求的规范,在国内公司应用应该没有问题

你觉得Java编码规范存在的意义是什么?
没有规矩不成方圆
没有规范,项目稍微大一点的时候,就会出现问题,统一规范,可以提高开发效率

0

灵魂可口 复制链接去分享

支持支持

牧马城 回复

支持

评论
0

鹏鹏111 复制链接去分享

代码人生,快乐最重要

0

土逗ing 复制链接去分享

为什么是第83行呢?

不靠谱贝贝 回复

请看之前的活动:"向代码致敬,寻找你的第83行" https://yq.aliyun.com/roundtable/67516

评论
0

bean先生 复制链接去分享

这版java规范,也许会成为全球开发者的统一规范

0

wangmaojie 复制链接去分享

学习学习

0

wyx88688123 复制链接去分享

附二:专有名词解释很有用。附一:版本历史大致懂了。前面36章~我被雷劈了……每次阅读阿里云知识,英文:不懂 、链接:多到怀疑人生、理解度:1%、 文中涉及二维码:加了没同意过、买产品:无法选择…………注册阿里云一周后的感受:丫的!能不能给我个老师!本来就笨,现在卡到重启都有困难😓

0

1040964944042682 复制链接去分享

我觉得有必要做一个规范文档的规范,做一个符合规范的规范插件,凡是符合规范规范插件的规范都可以完成规范的校验。我觉得第一条声明就是做一个向规范靠拢的程序员

0

1366892690958373 复制链接去分享

感受颇深,还需砥砺前行,争取早日得道升仙!

0

wyx88688123 复制链接去分享

很尴尬 我只是实名认证了 我想找份工作工作
可我不知道接下来怎么做😢

0

1167528194226435 复制链接去分享

有规约才有规范,有规范才能在写bug的路上少走弯路

0

java黑白 复制链接去分享

预计很多年以后阿里的java规范会成为全国开发者的统一规范。

4
21854
浏览
0
收藏
邀请他人互动
关注
6
粉丝
459
话题
54

简介:

WEB前端工程师 & 网页设计师 & 伪极客
超过10,000,000域名在这里注册

一站式提供企业即时通讯、销售管理、协同办公。

国内建站市场NO.1

为您提供简单高效、处理能力可弹性伸缩的计算服务,帮助您快速构建更稳定、安全的应用,提升运维效率,降低 IT 成本...