阿裏巴巴Java開發手冊上常規的編程命名總結
阿裏巴巴Java開發手冊上常規的編程命名總結:
1.類名必須駝峰.
例子:MarcoPolo / UserDO / XmlService / TcpUdpDeal / TaPromotion
2.方法名、參數名、成員變量、局部變量都統一使用 lowerCamelCase 風格,必須遵從
駝峰形式。
例子:localValue / getHttpMessage() / inputUserId
3.常量命名全部大寫,單詞間用下劃線隔開,力求語義表達完整清楚,不要嫌名字長。
例子:MAX_STOCK_COUNT
4.抽象類命名使用 Abstract 或 Base 開頭;異常類命名使用 Exception 結尾;測試類命 名以它要測試的類的名稱開始,以 Test 結尾
5.包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞。包名統一使用 單數形式,但是類名如果有復數含義,類名可以使用復數形式。
例子:應用工具類包名為 com.alibaba.mpp.util、類名為 MessageUtils(此規則參考 spring
的框架結構)
6.設計模式:
推薦如果使用到了設計模式,建議在類名中體現出具體模式。
說明:將設計模式體現在名字中,有利於閱讀者快速理解架構設計思想。
正例:public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;
7.接口和實現類的命名有兩套規則:
1)對於 Service 和 DAO 類,基於 SOA 的理念,暴露出來的服務一定是接口,內部
的實現類用 Impl 的後綴與接口區別。
正例:CacheServiceImpl 實現 CacheService 接口
2)推薦 如果是形容能力的接口名稱,取對應的形容詞做接口名(通常是–able 的形式)。
正例:AbstractTranslator 實現 Translatable。
8. 參考枚舉類名建議帶上 Enum 後綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開。
說明:枚舉其實就是特殊的常量類,且構造方法被默認強制是私有。
正例:枚舉名字:DealStatusEnum;成員名稱:SUCCESS / UNKOWN_REASON。
9. 各層命名規約:
A) Service/DAO 層方法命名規約
1) 獲取單個對象的方法用 get 做前綴。
2) 獲取多個對象的方法用 list 做前綴,可以用query。
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。
提示:
1. 推薦接口類中的方法和屬性不要加任何修飾符號(public 也不要加),保持代碼的簡潔
性,並加上有效的 javadoc 註釋。盡量不要在接口裏定義變量,如果一定要定義變量,肯定是
與接口方法相關,並且是整個應用的基礎常量。
正例:接口方法簽名:void f();
接口基礎常量表示:String COMPANY = "alibaba";
反例:接口方法定義:public abstract void f();
說明:JDK8 中接口允許有默認實現,那麽這個 default 方法,是對所有實現類都有價值的默認實現。
2. 強制.不允許出現任何魔法值(即未經定義的常量)直接出現在代碼中。
反例: String key="Id#taobao_"+tradeId;
cache.put(key, value);
3. long 或者 Long 初始賦值時,必須使用大寫的 L,不能是小寫的 l,小寫容易跟數字 1 混淆,造成誤解。
說明:Long a = 2l; 寫的是數字的 21,還是 Long 型的 2?
4. 不要使用一個常量類維護所有常量,應該按常量功能進行歸類,分開維護。如:緩存 相關的常量放在類:CacheConsts 下;系統配置相關的常量放在類:ConfigConsts 下。
說明:大而全的常量類,非得 ctrl+f 才定位到修改的常量,不利於理解,也不利於維護
5. 常量的復用層次有五層:跨應用共享常量、應用內共享常量、子工程內共享常量、包
內共享常量、類內共享常量。
1) 跨應用共享常量:放置在二方庫中,通常是 client.jar 中的 const 目錄下。
2) 應用內共享常量:放置在一方庫的 modules 中的 const 目錄下。
反例:易懂變量也要統一定義成應用內共享常量,兩位攻城師在兩個類中分別定義了表示
“是”的變量:
類 A 中:public static final String YES = "yes";
類 B 中:public static final String YES = "y";
A.YES.equals(B.YES),預期是 true,但實際返回為 false,導致產生線上問題。
3) 子工程內部共享常量:即在當前子工程的 const 目錄下。
4) 包內共享常量:即在當前包下單獨的 const 目錄下。
5) 類內共享常量:直接在類內部 private static final 定義。
6. 如果變量值僅在一個範圍內變化用 Enum 類。如果還帶有名稱之外的延伸屬性,必須 使用 Enum 類,下面正例中的數字就是延伸信息,表示星期幾。
正例:public Enum{ MONDAY(1), TUESDAY(2), WEDNESDAY(3), THURSDAY(4), FRIDAY(5),
SATURDAY(6), SUNDAY(7);}
7.避免通過一個類的對象引用訪問此類的靜態變量或靜態方法,無謂增加編譯器解析成 本,直接用類名來訪問即可。
8.所有的覆寫方法,[email protected]
反例:getObject()與 get0bject()的問題。一個是字母的 O,一個是數字的 0,[email protected]
可以準確判斷是否覆蓋成功。另外,如果在抽象類中對方法簽名進行修改,其實現類會馬上編
譯報錯
9.相同參數類型,相同業務含義,才可以使用 Java 的可變參數,避免使用 Object。 說明:可變參數必須放置在參數列表的最後。(提倡同學們盡量不用可變參數編程)
正例:public User getUsers(String type, Integer... ids);
10. 對外暴露的接口簽名,原則上不允許修改方法簽名,避免對接口調用方產生影響。接 [email protected]