1. 程式人生 > >阿里巴巴開發手冊解析個人筆記(一)

阿里巴巴開發手冊解析個人筆記(一)

文章目錄

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。