阿里巴巴开发手册解析个人笔记(一)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010498753/article/details/84870291

1.编码规约篇

1.1命名风格

1.1.1 $与_

代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束
为什么?java命名有几个基本的规则

1)、名称只能由字母、数字、下划线、$符号组成

2)、不能以数字开头

3)、名称不能使用JAVA中的关键字。

业务场景举例:

当首字母是数字时,我们得考虑,他后续的也能是数字
long 1000L = 23;
System.out.println(1000L+1); 
这时候编译器糊涂了

不能是JAVA关键字开头也是同理
static class A= new class(); 这时候class究竟是关键字,还是一个类?编译器也糊涂了

然而这个不能以下划线或美元符号开始,也不能以下划线或美元符号结束

$开头语结尾,myeclipse的正则搜索都无法搜索到变量名
正则搜索搜不出这个变量名

以_开头或者_感觉是难易阅读
在这里插入图片描述
代码例子

@Test
	public void dollarAnd_(){
		String nameA="test";
		String name$="";
		String $name="";
		String $$__="";
		String __$$="";
		String nameB="test";
		String name="";
		String _name="testA";
		String __name="A";
		String name_="A";
		String name__="B";
		System.out.println(name+_name+__name+name_+name__);		
	}

1.1.2 拼音命名的坏处

这个应该是常识

@Test
	public void pinyinDisAdvanteage(){
		String chuangJianShiJian="";
		String shouXuFei="";
		System.out.println(chuangJianShiJian+shouXuFei);
		String createTime="";
		String feeAmount="";
		System.out.println(createTime+feeAmount);
	}

1.1.3 驼峰命名规格

3.【强制】类名使用 UpperCamelCase 风格,但以下情形例外: DO / BO / DTO / VO / AO /
PO / UID 等。
4.【强制】方法名、参数名、成员变量、局部变量都统一使用 lowerCamelCase 风格,必须遵从
驼峰形式
5.【强制】常量命名全部大写,单词间用下划线隔开,力求语义表达完整清楚,不要嫌名字长
6.【强制】抽象类命名使用 Abstract 或 Base 开头; 异常类命名使用 Exception 结尾; 测试类
命名以它要测试的类的名称开始,以 Test 结尾

9.【强制】包名统一使用小写,点分隔符之间有且仅有一个自然语义的英语单词。包名统一使用

为什么DO可以使用不使用UpperCamelCase(驼峰命名)?
因为DO是DataObject的缩写
BO是BusinessObject(业务对象的缩写)
DTO是DataTransferObject(数据传输对象的缩写)
其他同理

1.1.3.1驼峰命名

引自:https://blog.csdn.net/zhu_xun/article/details/19912411

命名类别 命名规则
包名 全小写,连接词使用-符号
类名 开头大写
局部变量名 typeVariableName 开头小写
常量变量名 全部大写,连贯使用_ MAX_VALUE
Controller变量名 模块+操作+Action UserDeleteAction
Service变量名 模块+操作+Service
Dao变量名 模块+操作+Dao

1.1.4 类型与中括号紧挨相连来表示数组

瞬间知道代码的意思

7. 【强制】类型与中括号紧挨相连来表示数组。
@Test
	public void array(){
		String[] fruit={"apple","orange"};
		String fruit2[]={"apple","orange"};
	}

1.1.5 设计模式的命名

12.【推荐】如果模块、 接口、类、方法使用了设计模式,在命名时需体现出具体模式。

通常设计模式都有固定的编写模版,就好像

Logger logger = LoggerFactory.getLogger("AliBabaReading");

使用了工厂模式,别人就知道肯定有一个createProduct的类似的方法。这样子就比较容易理解

1.1.6 接口方法和变量规约

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

我们了解到接口是一个所有方法都是抽象方法的抽象类,抽象类因为有抽象方法所以不能被实例化,因为调用时编译器不知道从哪里找,但如果一个具体的子类实例化他,才能使用

UserService userService = new UserService() ; //报错,是接口,不能被实例化
UserService userService  = new UserServiceImpl(); //正确,因为UserServiceImpl事先了接口

因为调用时使用 userService .methodName() ; 而userService 必须依赖 子类的实现,所以使用userService的方法必须支持其他包,所以接口的方法都默认是public,里面的变量也是同理,他必须要支持其他包,而且理解到接口是类的抽象,所以java的作者默认了变量是final static

修饰符	   当前类	  同包	子类	      其他包
public	      √	    √	         √                √
protected      √	    √   	 √	           ×
default	      √	    √	         ×	           ×
private	      √	    ×	         ×	           ×

使用javac 和javap命令查看编译优化后的结果

public interface UserService {
	int variable=3;
	void methodName();
}

在这里插入图片描述

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

1.1.7 enum编程规约

15.【参考】枚举类名建议带上 Enum 后缀,枚举成员名称需要全大写,单词间用下划线隔开。


public enum StatusCodeEnum {
	SUCCESS,FAIL,WARN;
}

在这里插入图片描述

1.1.8 各层编码规约

16.【参考】各层命名规约:
A) Service/DAO 层方法命名规约
1) 获取单个对象的方法用 get 做前缀。有fetch,obtain等
2) 获取多个对象的方法用 list 做前缀,复数形式结尾如: listObjects。 有array的存在
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。

猜你喜欢

转载自blog.csdn.net/u010498753/article/details/84870291