阿里巴巴開發手冊解析個人筆記(一)
文章目錄
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。