读《阿里Java开发手册》总结(1)
一·命名约定
- 类名使用大驼峰式命名(领域模式相关命名除外:如DAO\VO\DO等)。
- 常量必须全部大写,单词中间用“_”隔开(如MAX_COUNT)。
- 抽象类命名使用Abstract或Base开头。异常类命名使用Exception结尾。测试类命名以它要测试的类的名称开始,然后以Test结尾。
- 中括号是数组类型的一部分:String[] args;不要使用String args[]来定义。
- 简单Java对象(pojo)类中的布尔类型的变量,都不要加is,否则框架解析会引起序列化错误。比如Boolean isSuccess;这样定义,里面有个方法也叫isSuccess,框架反向解析时会导致属性获取不到。
- 包名统一用小写,而且点分割符之间只能有一个自然语义的英文单词。
- 杜绝完全不规范的缩写(如以下错误示范:AbstractClass写成AbsClass~condition写成condi)。
- 如果使用了设计模式,建议在类名中直接体现,便于理解设计思想(如:public class LoginProxy)。
- 推荐接口类的方法和属性不要加任何修饰符(public也不要,default除外),保持代码的简洁,且必须加上详细的Javadoc注释。
- 尽量不要在接口里面定义变量,如果一定要定义变量那肯定是和接口方法有关,而且是整个应用的基础变量(如:String COMPANY = “alibaba”)。
- 对于Service和DAO,基于SOA思想,暴露出来的一定是接口,内部的实现类用Impl的后缀与接口区分开来。如果是形容能力的接口名称,通常是以-able结尾。
- 枚举类名建议带上Enum后缀,枚举成员名称需要全大写,单词间用下划线隔开(当成特殊的常量类,且构造方法被默认强制是私有的)
- 各层命名约束
A)Service,DAO层方法命名约束
1)获取单个对象,方法用get做前缀
2)获取多个对象,方法用list做前缀
3)获取统计值,方法用count做前缀
4)插入方法用save(推荐)或insert做前缀
5)删除方法用remove(推荐)或delete做前缀
6)修改方法用update做前缀
B)领域模型命名规范(POJO 是 DO /DTO / BO / VO 的统称)
1)数据传输对象: : xxoTO , xxx 为业务领域相关的名称。
2)数据对象:xxxDO , xxx 即为数据表名。
3)展示对像: xxxVO . xxx 一般为网页名称。
二·常量定义
- long 或者 Long 初始从位时,必须使用大写的 L,不能是小写的l ,小写容易跟数字1棍淆,造成误解。说明: Long a = 2l 认写的是数字的 21 ,还是 Long 型的2 ?
- 推荐变量在一个范围内变化时用Enum类,如果还带有名称之外的延伸属性必须使用Enum类,下面例中数字为延伸信息:public Enum{MONDAY(1),TUESDAY(2),WEDNESDAY(3)}
- 不要使用一个常量类维护所有常量,应该按常量功能进行归类,分开维护。如:缓存相关的常量放在类:CacheConsts下:系统配置相关的常量放在类:ConfigConsts下。
说明:大而全的常量类,非得使用査找功能才能定位到修改的常量,不利于理解和维护。
- 常量的复用层次有五层:跨应用共享常量、应用内共享常量、子工程内共享常量、包内共享常量、类内共享常量。
1) 跨应用共享常量:放罝在二方库中,通常是client, jar中的constant目录下。
2) 应用内共享常量:放罝在一方库的modules中的constant目录下。
反例:易惺变量也要统一定义成应用内共享常量,两位攻城师在两个类中分别定义了
表示“是"的变量:
类A 中:public static final String YES = "yes";
类 B 中:public static final String YES = "y";
- YES.equals(B.YES) ,预期是true,但实际返回为false,导致产生线上问题
3 ) 子工程内部共享常量:即在当前子工程的constant目录下。
4) 包内共卓常最:即在当前包下单独的constantB录下。
5) 类内共享常量用private static final定义
相关:
《阿里巴巴Java开发手册》v1.4.0(详尽版):https://yq.aliyun.com/attachment/download
编码规范考试认证:https://edu.aliyun.com/certification/cldt02
IDE插件下载:https://github.com/alibaba/p3c
读《阿里Java开发手册》总结(1)的更多相关文章
- 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】
不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...
- 阿里JAVA开发手册零度的思考理解(一)
转载请注明原创出处,谢谢! 缘由 阿里JAVA开发手册已经发表有很长时间了,值得认真研究思考推广 阿里官方的Java代码规范标准,这份开发手册不仅规范了一些开发细节,也提出了很多工程开发的哲学,值得好 ...
- 阿里JAVA开发手册零度的思考理解(二)
转载请注明原创出处,谢谢! 说在前面 人生的大道上默默地走,就必须要有一盏灯亮着为你引导方向!而这盏灯抑或只是一句话,一句鼓励,一个赞美,一次承认,一次认可,一次相识一次交流-- 上篇文章:阿里JAV ...
- 阅读阿里Java开发手册记录
概述 在阅读完阿里Java开发手册(嵩山版)后,发现自己在开发过程中有一些没有按照规范开发的情况,这里将容易忘记的规范记录下来,并且添加自己的理解,一方面方便自己巩固记忆,另一方面希望对其他同学能够提 ...
- JUC学习笔记--从阿里Java开发手册学习线程池的正确创建方法
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式, 这样的处理方式让写的同学 ...
- 读阿里巴巴Java开发手册v1.2.0之工程结构有感【架构篇】
首先,把昨天那俩条sql语句的优化原因给大家补充一下,第一条效率极低,第二条优化后的,sql语句截图如下: 经过几个高手的评论和个人的分析: 第一条sql语句查询很慢是因为它首先使用了in关键字查询, ...
- 从阿里Java开发手册学习线程池的正确创建方法
前言 最近看阿里的 Java开发手册,上面有线程池的一个建议: [强制]线程池不允许使用 Executors 去创建,而是通过 ThreadPoolExecutor 的方式,这样的处理方式让写的同学更 ...
- 【转】线程池体系介绍及从阿里Java开发手册学习线程池的正确创建方法
jdk1.7中java.util.concurrent.Executor线程池体系介绍 java.util.concurrent.Executor : 负责线程的使用与调度的根接口 |–Execut ...
- 阿里java开发手册中命名规约解读之DO/BO/DTO/VO/AO
前言 在阅读<阿里巴巴Java开发手册>时,看到命名规则中有这样一条 虽然知道这些是根据Java对象的角色所分配名称的后缀,但是没有弄清楚分别是什么意思,日常开发中也没有使用到. 网上查找 ...
随机推荐
- ubuntu16.04下使用navicat连接docker mysql5.7.20
摘要: 本文将介绍如何使用docker创建mysql容器,并使用navicat连接该mysql服务,最后提供一个navicat中文乱码问题的解决方案. docker的安装和使用在这里不再赘述,如果不是 ...
- WeexSDK源码分析(iOS)
0.从工作原理谈起 Weex 表面上是一个客户端技术,但实际上它串联起了从本地开发.云端部署到分发的整个链路.开发者首先可在本地像编写 web 页面一样编写一个 app 的界面,然后通过命令行工具将之 ...
- 使用Lucene-Spatial实现集成地理位置的全文检索
Lucene通过Spatial包提供了对基于地理位置的全文检索的支持,最典型的应用场景就是:“搜索中关村附近1公里内的火锅店,并按远近排序”.使用Lucene-Spatial添加对地理位置的支持,和之 ...
- Java学习笔记38(字符流)
字符输出流:Writer类:使用时候需要它的子类 局限性:只能写文本文件,无法写其他文件 方法: package demo; import java.io.FileWriter; import jav ...
- 如何使用spring配合mybatis配置多个数据源并应用?
使用多数据源的场景应该是很多的,如操作同一台服务器上不同的数据库,或者多地机器上的相同或不相同数据库. 虽然涉及到不同数据库时,我们也许可以通过跨库操作的方式,如 other.user 使用同一数据源 ...
- Postgresql日志收集
PG安装完成后默认不会记录日志,必须修改对应的(${PGDATA}/postgresql.conf)配置才可以,这里只介绍常用的日志配置. 1.logging_collector = on/off ...
- CentOS第一次安装MySQL的完整步骤
文章来自:http://www.jianshu.com/p/4a41a6df19a6,我自己调整了下 1.官方安装文档 http://dev.mysql.com/doc/mysql-yum-repo- ...
- U-boot的编译方式及目录结构解析
U-boot的整体结构和linux基本类似,编译方式一般也是非常类似的,一般的编译命令: make CROSS_COMPILE=arm-linux-gnueabihf- XXX(目标名) 清除命令: ...
- Ubuntu 16.04 安装 arm-linux-gcc 交叉编译工具
工作需要,最近在编译linux嵌入式内核时,需要安装arm-linux-gcc交叉编译,实际上,安装这个交叉编译器的难度没啥.不过,这里有些问题还是值得我去思考和记录下来的. 这个系统的上的编译器用的 ...
- python中的基本数值计算
最近用到了python的数字信号处理,发现很多以前学的都忘掉了,这里做个笔记 # -*- coding: utf-8 -*- #计算乘方 print pow(3,4) #计算平方 import num ...