摘要
本文主要講解阿裏JAVA開發手冊中比較重要的設計規範,這些重要的設計規範有助于我們改進自己的代碼,提升系統的系統的性能。
曾經與一位從阿裏出來的Java工程師一起工作過一段時間,他的技術說不上非常厲害,但是,他的代碼寫的的非常好,凡是他做的功能很少出現Bug。我就很好奇,于是經常向他請教一些代碼設計的原則,然後他告訴了我阿裏Java手冊。並且,他將這個手冊進行了修改,也成爲了我司Java程序員的開發手冊。這篇文章就讓我們看一看這個手冊中比較重要的原則。
【推薦】接口類中的方法和屬性不要加任何修飾符號(public 也不要加),保持代碼的簡潔 性,並加上有效的 Javadoc 注釋。盡量不要在接口裏定義變量,如果一定要定義變量,肯定 是與接口方法相關,並且是整個應用的基礎常量。
正例:接口方法簽名 void commit();
接口基礎常量 String COMPANY = “alibaba”;
反例:接口方法定義 public abstract void f();
說明:JDK8 中接口允許有默認實現,那麽這個 default 方法,是對所有實現類都有價值的默認實現。
【參考】枚舉類名帶上 Enum 後綴,枚舉成員名稱需要全大寫,單詞間用下劃線隔開。
說明:枚舉其實就是特殊的類,域成員均爲常量,且構造方法被默認強制是私有。
正例:枚舉名字爲 ProcessStatusEnum 的成員名稱:SUCCESS / UNKNOWN_REASON。
【參考】各層命名規約:
- A) Service/DAO 層方法命名規約
1) 獲取單個對象的方法用 get 做前綴。
2) 獲取多個對象的方法用 list 做前綴,複數形式結尾如:listObjects。 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。
【強制】POJO 類必須寫 toString 方法。
使用 IDE 中的工具:source> generate toString 時,如果繼承了另一個 POJO 類,注意在前面加一下 super.toString。
說明:在方法執行抛出異常時,可以直接調用 POJO 的 toString()方法打印其屬性值,便于排查問題。
【強制】關于hashCode和equals的處理,遵循如下規則:
- 1) 只要覆寫 equals,就必須覆寫 hashCode。
- 2) 因爲 Set 存儲的是不重複的對象,依據 hashCode 和 equals 進行判斷,所以 Set 存儲的對象必須覆 寫這兩個方法。
- 3) 如果自定義對象作爲 Map 的鍵,那麽必須覆寫 hashCode 和 equals。
說明:String 已覆寫 hashCode 和 equals 方法,所以我們可以愉快地使用 String 對象作爲 key 來使用。
【強制】線程資源必須通過線程池提供,不允許在應用中自行顯式創建線程。
說明:線程池的好處是減少在創建和銷毀線程上所消耗的時間以及系統資源的開銷,解決資源不足的問 題。如果不使用線程池,有可能造成系統創建大量同類線程而導致消耗完內存或者“過度切換”的問題。
【強制】線程池不允許使用Executors去創建,而是通過ThreadPoolExecutor的方式,這樣的處理方式讓寫的同學更加明確線程池的運行規則,規避資源耗盡的風險。