>[info] 1.【強制】POJO 類中布爾類型的變量,都不要加 is。
否則部分框架解析會引起序列化錯誤。
反例:定義為基本數據類型 `boolean isSuccess`;的屬性,它的方法也是 `isSuccess()`,RPC 框架在反向解析的時候,“以為”對應的屬性名稱是 `success`,導致屬性獲取不到,進而拋出異 常。
>[danger] 2.【推薦】接口類中的方法和屬性不要加任何修飾符號(public 也不要加)
保持代碼的簡潔性,并加上有效的 Javadoc 注釋。盡量不要在接口里定義變量,如果一定要定義變量,肯定是與接口方法相關,并且是整個應用的基礎常量。
>[warning] 3.【參考】各層命名規約
**Service/DAO 層方法命名規約**
1. 獲取單個對象的方法用 `get` 做前綴。
2. 獲取多個對象的方法用 `list` 做前綴.
3. 獲取統計值的方法用 `count` 做前綴。
4. 插入的方法用 `save`(推薦)或 `insert` 做前綴。
5. 刪除的方法用 `remove`(推薦)或 `delete` 做前綴。
6. 修改的方法用 `update` 做前綴。
**領域模型命名規約**
1. 數據對象:`xxxDO`,xxx 即為數據表名。
2. 數據傳輸對象:`xxxDTO`,xxx 為業務領域相關的名稱。
3. 展示對象:`xxxVO`,xxx 一般為網頁名稱。
4. `POJO` 是 `DO/DTO/BO/VO` 的統稱,禁止命名成 `xxxPOJO`。
>[success] 4.基本類型與包裝類型的使用標準
【強制】所有的 `POJO` 類屬性必須使用包裝數據類型
【強制】RPC 方法的返回值類型和參數必須使用包裝數據類型
【推薦】所有的局部變量使用基本數據類型
> 說明:`POJO` 類屬性沒有初值是提醒使用者在需要使用時,必須自己顯式地進行賦值,任何
> NPE 問題,或者入庫檢查,都由使用者來保證。
> 正例:數據庫的查詢結果可能是 null,因為自動拆箱,用基本數據類型接收有 NPE 風險。
> 反例:比如顯示成交總額漲跌情況,即正負 x%,x 為基本數據類型,調用的 RPC 服務,調用
> 不成功時,返回的是默認值,頁面顯示為 0%,這是不合理的,應該顯示成中劃線。所以包裝
> 數據類型的 null 值,能夠表示額外的信息,如:遠程調用失敗,異常退出。
>[info] 5.【強制】`POJO`類必須寫`toString`方法。
使用IDE中的工具,自動生成,如果繼承了另一個`POJO`,注意在前面加一下`super.toString`。
使用了`JPA/Hibernate`框架,不要使用 Lombok 的`@toString`注解,有循環調用導致內存溢出的 bug。
>[warning] 6.使用索引訪問String的split方法得到的數組時,需做最后一個分隔符后有無內容的檢查,否則會有拋`IndexOutOfBondsException` 的風險.
>[success] 7.【推薦】循環體內,字符串的連接方式,使用`StringBuilder` 的 `append` 方法進行擴展。
說明:反編譯出的字節碼文件顯示每次循環都會 `new` 出一個 `StringBuilder` 對象,然后進行
`append` 操作,最后通過 `toString` 方法返回 `String` 對象,造成內存資源浪費。
反例:
```java
String str = "start";
for (int i = 0; i < 100; i++) {
str = str + "hello";
}
```
>[danger] 8.【推薦】`final` 可以聲明類、成員變量、方法、以及本地變量,下列情況使用 `final` 關鍵字:
1. 不允許被繼承的類,如:`String` 類。
2. 不允許修改引用的域對象,如:`POJO` 類的域變量。
3. 不允許被重寫的方法,如:`POJO` 類的 `setter` 方法。
4. 不允許運行過程中重新賦值的局部變量。
5. 避免上下文重復使用一個變量,使用 `final` 描述可以強制重新定義一個變量,方便更好
地進行重構