代碼要求
- 方法名、參數名、成員變量、局部變量都統一使用 lowerCamelCase 風格,必須遵從駝峰形式。
- 常量命名全部大寫,單詞間用下劃線隔開,力求語義表達完整清楚,不要嫌名字長。
- 抽象類命名使用Abstract或Base開頭;異常類命名使用Exception結尾;測試類命名以它要測試的類的名稱開始,以Test結
- 類型與中括号緊挨相連來表示數組
- POJO類中布爾類型變量都不要加is字首,否則部分架構解析會引起序列化錯誤
- Controller層隻做資料校驗,不做業務處理
- Service做業務處理,可調用本身的Mapper,如需調用别的子產品,需調用其他子產品Service,不可直接調用Mapper
- 避免在子父類的成員變量之間、或者不同代碼塊的局部變量之間采用完全相同的命名,使可讀性降低
- 在long或者Long指派時,數值後使用大寫的L,不能是小寫的l,小寫容易跟數字1混淆,造成誤解
- 如果是大括号内為空,則簡潔地寫成{}即可,大括号中間無需換行和空格;如果是非空代碼塊則:
- 1) 左大括号前不換行。
- 2) 左大括号後換行。
- 3) 右大括号前換行。
- 4) 右大括号後還有else等代碼則不換行;表示終止的右大括号後必須換行。
- 單行字元數限制不超過120個,超出需要換行,換行時遵循如下原則:
- 1)第二行相對第一行縮進4個空格,從第三行開始,不再繼續縮進,參考示例。
- 2)運算符與下文一起換行。
- 3)方法調用的點符号與下文一起換行。 *
-
4)方法調用中的多個參數需要換行時,在逗号後進行。 5)在括号前不要換行
例: StringBuilder sb = new StringBuilder(); // 超過120個字元的情況下,換行縮進4個空格,點号和方法名稱一起換行 sb.append("Jack").append("Ma")... .append("alibaba")... .append("alibaba")... .append("alibaba"); 反例: StringBuilder sb = new StringBuilder(); // 超過120個字元的情況下,不要在括号前換行 sb.append("Jack").append("Ma")...append ("alibaba"); // 參數很多的方法調用可能超過120個字元,不要在逗号前換行 method(args1, args2, args3, ... , argsX);
- Object的equals方法容易抛空指針異常,應使用常量或确定有值的對象來調用equals
- 所有整型包裝類對象之間值的比較,全部使用equals方法比較
- 浮點數之間的等值判斷,基本資料類型不能用==來比較,包裝資料類型不能用equals來判斷
- 所有的POJO類屬性必須使用包裝資料類型
- 關于hashCode和equals的處理,遵循如下規則:
- 1) 隻要覆寫equals,就必須覆寫hashCode。
- 2) 因為Set存儲的是不重複的對象,依據hashCode和equals進行判斷,是以Set存儲的對象必須覆寫這兩個方法。
- 3) 如果自定義對象作為Map的鍵,那麼必須覆寫hashCode和equals。
- 避免通過一個類的對象引用通路此類的靜态變量或靜态方法,無謂增加編譯器解析成本,直接用類名來通路即可
- 所有的覆寫方法,必須加@Override注解
- 相同參數類型,相同業務含義,才可以使用Java的可變參數,避免使用Object
- 可變參數必須放置在參數清單的最後。(提倡同學們盡量不用可變參數程式設計)
- 外部正在調用或者二方庫依賴的接口,不允許修改方法簽名,避免對接口調用方産生影響。接口過時必須加@Deprecated注解,并清晰地說明采用的新接口或者新服務是什麼。
- 為了防止精度損失,禁止使用構造方法BigDecimal(double)的方式把double值轉化為BigDecimal對象。
-
優先推薦入參為String的構造方法,或使用BigDecimal的valueOf方法,此方法内部其實執行了Double的toString,而Double的toString按double的實際能表達的精度對尾數進行了截斷。
BigDecimal recommend1 = new BigDecimal("0.1"); BigDecimal recommend2 = BigDecimal.valueOf(0.1);
-
- 循環體内,字元串的連接配接方式,使用StringBuilder的append方法進行擴充
- final可以聲明類、成員變量、方法、以及本地變量,下列情況使用final關鍵字:
- 1) 不允許被繼承的類,如:String類。
- 2) 不允許修改引用的域對象。
- 3) 不允許被覆寫的方法,如:POJO類的setter方法。
- 4) 不允許運作過程中重新指派的局部變量。
- 5) 避免上下文重複使用一個變量,使用final可以強制重新定義一個變量,友善更好地進行重構。
- 慎用Object的clone方法來拷貝對象
- 對象clone方法預設是淺拷貝,若想實作深拷貝需覆寫clone方法實作域對象的深度周遊式拷貝。
方法命名規約
- 擷取單個對象的方法用 get 做字首。
- 擷取多個對象的方法用 list 做字尾。
- 擷取統計值的方法用 count 做字尾。
- 插入的方法用 save( 推薦 ) 或 insert 做字首。
- 删除的方法用 remove( 推薦 ) 或 delete 做字首。
- 修改的方法用 update 做字首。
檔案命名規則
- 對外暴露的controller檔案以Controller結尾
- service内的接口以Service結尾
- service的實作以ServiceImpl結尾
- dao包下的檔案以Mapper結尾
- 包名統一使用小寫,點分隔符之間有且僅有一個自然語義的英語單詞。包名統一使用單數形式,但是類名如果有複數含義,類名可以使用複數形式
- dto包下的資料傳輸對象,檔案名為xxxDTO.java,其他的vo、form下的檔案名命名規範類似
資料腳本
- 各個版本的放在相應環境各個版本下面的檔案内
- 各個環境下面的檔案代表在該環境已經執行的腳本
- 待執行的可放在v0.0内,此條規定隻适用于dev環境,其他環境通過腳本檔案比對即可