《阿里巴巴Java开发手册v1.2》解析(编程规约篇)

  之前在乐视天天研究各种底层高大上的东西,因为我就一个人,想怎么弄怎么弄。如今来了新美大,好好研读一下《阿里巴巴Java开发手册v1.2》。还要对这么看似简单的东西解析一番。毕竟现在带团队,讲究团队合作。现在项目稍微有点乱,早统一,代价越低。别问我乐视是不是不行了。乐视好的很,已经到了谷底,该反弹了,看好乐视。我离开是因为自己的技术瓶颈,要是乐视像去年发展的那么好,我估计离开的更早。

  我自己本身其实就是不怎么讲究章法的人。也没打算拿什么去约束大家。我跟领导谈学习这个手册的事情。领导比较担心的是怎么落地。我回家跟我家男神讨论,他也说章法的东西没有强制约束就不会有效果。所以我家男神他们公司都用统一的模板,统一的软件,还有专门的QA对于规范不合格的要打回去重改。一个初创的创业公司尚且如此,咱们美团确实不能落后啊。但是这种实行起来确实耗时耗力,也没有很大的必要。我主要想达到的效果是:领导把组织技术分享这件事情交给我了,那我就需要对大家的技术成长负责。这是个长期的过程,现在大家都很忙,每周一个技术分享大家前期没有时间准备,但是如果技术分享这件事情一旦断掉,持续性得不到保证,技术成长和学习就很难形成一个习惯。所以前期打算学习一些看起来很简单,压力不是很大的事情,一次学习一点,大家也不用准备,一周一个小时现在学即可。而且工作中确实存在一些这样那样的小问题。会议过程中总体学习完一遍之后,每个人都需要对目前自己编程过程中做的不是很到位的,或者有特别感触的至少提出一点来。我想领导说的seminar的思想,也就是希望大家都有自己的思考。

  学这个东西都自身的提高到底有什么好处。举一个例子:我之前学心理学的时候我们老师说他去美国的时候发现美国佬自己说话也不讲究语法。他就想那为什么我们学习的就需要各种时态用的那么准确呢。后来他去美国的学校,发现大学教授们各种时态语法用的甚是地道。原来这是素养的体现。后来我自己去美国,美国人很热情的,大街上经常有不认识的人对面走过来就打招呼,发现你很爱聊天的话,还会停下来唠一唠。如果他们说话不讲语法,我理解起来就很费劲,可能还需要他们重复一遍。我最不爱去商场购物的地方。因为经常有人拉着我讨论各种品牌,我对牌子的东西一窍不通,我身上穿的用的都不是什么高档的东西。要说我身上唯一值钱的,就只有我自己了。总之,他们说话语法不规范,不是标准的语法,还带着口音,还有各种生词,聊天那叫一个费劲。写代码也一样,不规范只是让代码难懂一点点,但是再加上不了解业务逻辑,代码构成等等,总体就会很晦涩。晦涩或易懂最终决定了素养。

一· 编程规约

(一)命名风格

  1. 【强制】代码中的命名均不能以“下划线”或“美元符号”开始,也不能以“下划线”或“美元符号”结束。

  2.【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。

  3.【强制】类名使用UpperCamelCase风格,必须遵从驼峰形式,但以下情形例外:DO/BO/DTO/VO/AO

解析:

  DO是(Domain Object):领域对象,就是从现实世界中抽象出来的有形或者无形的业务实体。

  BO是(Bussiness Object):业务对象,封装业务逻辑的java对象,通过调用DAO方法,结合PO,VO进行业务员操作。

  DTO是(Data Transfer Object):数据传输对象,是一种设计模式之间传输数据的,一般需要序列化。

  VO是(View Object):视图对象,用于展示层。

  AO是(Activation Object):活动对象,一种基于消息机制,异步调用,现成安全的对象。

 4.【强制】方法名,参数名,成员变量,局部变量都统一使用lowerCanelCase风格,必须遵从驼峰形式。

 5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。

 6.【强制】抽象类命名使用Abstract或Base开头,异常类命名使用Exception结尾,测试类命名以它要测试的类名称开始,以Test结尾。

 7.【强制】中括号是数组类型的一部分,数组定义如下:String[] args;  反例:使用String args[](这么写的哥哥大概之前是做C的)

 8.【强制】POJO类中布尔类型的变量,都不要加is,否则部分框架解析会引起序列化错误。反例:定义为基本数据类型Boolean isDeleted的属性,它的方法也是isDeleted()。RPC框架在反向解析的时候,辨识为对应的属性名称是deleted,导致属性获取不到。

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

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

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

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

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

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

  2)【推荐】如果是形容能力的接口名称,取对应的形容词做接口名(通常是-able的形式)。正例:AbstractTranslator实现Translatable.

解析:SOA(Service-Oriented Architecture)面向服务架构提供了支持业务灵活性的IT灵活性远景,主要是流程实现的分离和简化。现在都是提微服务了。微服务架构模式(Microservices Architecture Pattern)的目的是将大型的,复杂的,长期运行的应用程序构建为一组相互配合的服务,每个服务都可以很容易的局部改良。需要符合SRP原则。SRP(Single Responisbility Principle)单一职责原则。是OO的五大原则之一。其他四个分别是OCP(Closed for Modification;Open for Extension)开闭原则,LSP(Liskov Substitution Priciple)里氏替换原则,DIP(Dependence Inversion Principle)依赖倒置原则,ISP(Interface Segregation Principle)接口隔离原则。

 14.【参考】枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开。说明:枚举其实就是特殊的常量类,且构造方法被默认强制是私有。

 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。

解析:领域模型(Domain Model)也叫业务对象模型。是对领域内的概念类或现实世界中对象的可视化表示。又称概念模型,领域对象模型,分析对象模型。专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。

跑题时间:

  记得从正和岛离职去乐视的时候,离职的最后一天,我坐在座位上,每个路过的人都能看到我笑的那么开心。同事说:你不应该笑啊,应该哭啊。我说:藏起泪眼只用笑容相送。其实离开那个耽误我青春的地方是真的很开心,但是我那时候还需要依赖,只是没有人可以依赖,所以我是真的对着显示器哭了一会儿。离开乐视,我没哭也没笑。我情商依然不高,大家的好我依然没有学的来。但是在这个环境中,大家给了我太多的迁就,所以我需要一个更有挑战的环境,来变成更好的自己。可以说遇到飞哥和我家微微一笑很倾城的男神老大是我工作十年最幸运的事情,没有之一。如今在新美大刚去总是做了一件事就发现做的有问题,说了一句话就发现自己说的不合适的。不过,现在的我却相信我自己,知道一切都会好起来。

  去乐视的时候,我待遇要的很低。HR都不敢跟我提待遇的事情,生怕我后悔了。可知那时候,我确实是不怎么会技术,但是我家男神待遇都不到我的一半。我家男神嫌“用友”离家远,决定换工作,我去替他打听行情。告诉他行情最低是多少。他却生气的告诉我说他不值这个钱。我告诉他不要放弃标准。然后他去面了几家公司,刚面嘛,面的一般,遇到HR压价,更打击了我家男神的自信。去电讯盈科面试,面试官说跟我家男神说这个职位给不了那么多,我家男神合适一个更高的职位。回家我家男神一顿埋怨我,甚至揪着我的衣领说都是我的错。我默默的听着,不辩解,只是坚定的跟他说:不要放弃标准。后来“电讯盈科”打电话给我家男神说有了一个合适的高级职位。虽然给的还是没要的高,而且也还是差不多我当时收入的一半,但是我俩已经很高兴了。其实那时候,论技术,我家男神确实是比我强。只是太过厚道的人就有这个不好的地方,会被忽悠。后来,我要换工作,遇到家里各种阻挠。我家男神不想让我放弃活少还高收入的工作。我家男神不开心,婆婆不开心,会直接导致儿子不开心。儿子骨子里内向,他不开心就一个表现:生病。那时候我上班离得很远,离家60多公里。回到家晚上11点多。儿子不爱吃婆婆做的饭。我回家做好放到冰箱第二天婆婆可以热热。为了让儿子爱吃,1根胡萝卜我切成29个不同的形状。做完饭后半夜2,3点了。为了不让儿子感染病菌,我睡觉前都要把自己放到高锰酸钾消毒水中泡一会儿。第二天还要6点起床去上班。那时候面过了高德,高德给的不高,我家男神不肯让我去。后来面过了58,给的也很低。各种压力打压着我对自己的标准。所以去乐视确实是自己要低了。也是没了解好行情,不过也比之前高点,可以实现我多年国外出差的心愿,离家也近,全家都很高兴了。

  我反省自己,出现这种情况的原因是我没给我家男神足够的自信。婆婆和老公都是对自己要求很低,自信心很低的人。之前我也给了他很多误导。我公司一直比他好,收入比他高。但是我在家都是各种玩。所以他一直也鄙视我的不努力。所以我开始自己努力,同时对他各种鼓励,鼓励我家男神做自己想做的事情,告诉他是最棒的。我家男神也确实越来越有自信,工作也越来越好。乐视出现了一些问题,今年确实没涨工资。如果今年我家男神工资早涨几个月,大概会第一次超过我吧。但是我家男神的待遇都不是跳槽谈来的,是用自己做出的成果证明来的,所以我以我家男神为傲。

  我家微微一笑很倾城的男神老大却是从面试完就觉得我技术好,各方面都不错。其实我哪里技术好,只是那时候面试比较多而已。他天生对人的信任,相信我可以做到一些自己做不到的事情。比如说,今年年初的时候,我自己都不知道自己除了做项目还会做点啥。我家男神老大却相信我可以做更多的事情。我大概真正开始学技术也就是从年初开始。可以说没有我家微微一笑很倾城的男神老大,就没有现在的我。但是我如今羽翼已丰,需要更大的发展空间。如果我感觉压力大的时候,就可以给我家微微一笑很倾城的男神老大发个微信。他会告诉我:“别后悔,别回头,勇敢往前走。”

  那天我说这么多年我都没怎么学技术,要补的太多了。我家男神说:“你看你在东软弄了两年日语,人人网时候你就学历史文学,后来学心理学。” 我满以为他会说你技术差也是正常的。结果他说:“所以你肯定是综合素质最好的”。我家男神已经长大成熟了,今年我换工作期间无论成功失败,都能得到他对我的肯定。再也不会觉得我说的是大话。我俩可以携手去创造奇迹了。

君は雪が融けたら何になると思う? うん、そうですね。春になりますね。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java技术

面试官想看到的以及面试者需要准备的!

本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不...

451
来自专栏Spark学习技巧

如何准备Java初级和高级的技术面试

1154
来自专栏程序员宝库

【收藏】如何准备Java初级和高级的技术面试

本人最近几年一直在做java后端方面的技术面试官,而在最近两周,又密集了面试了一些java初级和高级开发的候选人,在面试过程中,我自认为比较慎重,遇到问题回答不...

812
来自专栏程序人生

如何用正确的姿势打开 TDD?

TDD(Test Driven Development)一直是程序界追求的一种开发境界。要想真正做到对项目有帮助的 TDD,并不是一件容易的事情。我见过不少团队...

26310
来自专栏java一日一条

写给精明Java开发者的测试技巧

我们都会为我们的代码编写测试,不是吗?毫无疑问,我知道这个问题的答案可能会从 “当然,但你知道怎样才能避免写测试吗?” 到 “必须的!我爱测试”都有。接下来我会...

581
来自专栏H2Cloud

领域驱动设计-软件中的对象

软件中的对象 About DOMAIN-DRIVEN DESIGN 领域驱动设计是一种思维方式,目的在于处理具有复杂问题的软件项目。在传统的瀑布软件开发模型中,...

3365
来自专栏牛客网

2018春招总结

  从2018.2.27正式投的第一份简历开始计算,到今天是2018.4.24,到现在算下来大概两个月,随着确认了腾讯的录用通知函,漫长的春招终于告一段落,虽然...

3265
来自专栏wblearn

UML学习归纳整理

之前在学校比较系统的学习过统一建模语言UML,但长时间没使用遗忘了许多,最近因工作需要,所以对UML重新学习和梳理一下。UML可帮助我们做软件需求分析和软件设计...

801
来自专栏Java面试笔试题

UML中有哪些常用的图?

UML定义了多种图形化的符号来描述软件系统部分或全部的静态结构和动态结构,包括:用例图(use case diagram)、类图(class diagram)、...

653
来自专栏牛客网

阿里一二面面经

【每日一语】有时候我想成为别人,有时候我觉得自己是在为没有可能去好好享受的另一个人生去奋斗,所以我希望它能有价值。——《达拉斯买家俱乐部》

1233

扫码关注云+社区