前言
《阿里巴巴Java开发手册》一直深受Java开发爱好者和业界人士的认可,里面提出了许多宝贵的开发经验和建议,相信会对大家有很多的帮助。
但是所谓尽信书不如无书,需要对提到的规范有自己的思考和认同后,这本手册才能够对自己起到更大的帮助。
小弟不才,只是从个人观点谈谈对于这本手册阅读的理解,期望可以持续更新。
编程规约篇
命名风格
1.【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。
赞同,可以强制遵守。首先实际代码开发时确实可以这样去做,但这条规范应该是业内同行的共识了,而且以下划线和美元符号开始和结束并不会带来什么其他的好处。
2.【强制】所有编程相关的命名严禁使用拼音与英文混合的方式,更不允许直接使用中文的方式。
赞同,可以强制遵守。用纯英文表达释义更容易理解,拼音或者拼音与英文结合,还要考虑多音字的可能性,也不太好理解。
3.【强制】类名使用UpperCamelCase风格,但以下情形例外:DO/BO/DTO/VO/AO/ PO / UID 等。
赞同,可以强制遵守。驼峰式命名这个基本已经是共识了,但关于DO,BO等,其实项目中有人喜欢写Bo,有人先写BO,我个人感觉更倾向于两个都大写,这些其实是一些专用术语的缩写,所以都大写是比较合适的,比如DTO,其实是 Data Transfer Object的缩写。
4.【强制】方法名、参数名、成员变量、局部变量都统一使用lowerCamelCase风格。
赞同,可以强制遵守。基本都是业内共识了。
- 【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长。
赞同,可以强制遵守。全部大写,单词间下划线隔开,基本都是共识了,看到过部分代码因为考虑到长度问题,使用了一些缩写来表达,我个人不是很喜欢,属于宁可长一些,但更喜欢可读性强一些的开发者。
- 【强制】抽象类命名使用Abstract或Base开头;异常类命名使用Exception结尾;测试类 命名以它要测试的类的名称开始,以 Test 结尾。
赞同,可以强制遵守。这样理解会更加清晰一些。
- 【强制】类型与中括号紧挨相连来表示数组。
赞同,可以强制遵守。这样看起来会更加的直观清晰,手册中提到的反例是 在main函数的入参中,使用String args[]来定义。我看了下目前IDEA在自动生成main函数时已经是String[] args这种风格了。
- 【强制】POJO类中的任何布尔类型的变量,都不要加is前缀,否则部分框架解析会引起序列 化错误。
有待考究,待补充,手册中给的反例是定义为基本数据类型 Boolean isDeleted的属性,方法也是isDeleted(),框架在反向解析时,会以为对应的属性名称是deleted,导致属性获取不到,进而抛出异常。
那么是哪些框架会出现这些问题呢,现在是否仍然有这些问题,这个有一定历史感的规范是否仍要遵守,毕竟我觉得加上is后,如果是布尔类型,我会更好理解一些,也可以和数据库中的命名一一对应。
9.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用 单数形式,但是类名如果有复数含义,类名可以使用复数形式。
到类名之前的部分赞同,可以强制遵守。 关于类名有复数含义,可以用复数形式,这个困扰的主要是为什么类名会有复数含义呢,类代表的应该就是一个功能和属性的集合,按我的理解来说,应该是不具备复数含义的。
10.【强制】避免在子父类的成员变量之间、或者不同代码块的局部变量之间采用完全相同的命名,使可读性降低。
基本赞同,可以遵守,如果是代表同一个意思,用一个变量名表达,可读性会更好,管理维护也在一处地方。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。