編程規約
-
一方庫、二方庫、三方庫
- 一方庫:本工程內部子項目模塊依賴的庫(jar 包)。
- 二方庫:公司內部發布到中央倉庫,可供公司內部其它應用依賴的庫(jar 包)。
- 三方庫:公司之外的開源庫(jar 包)。
-
DO、DTO、BO、VO
- DO: 與數據表對應的實體類, xxxDO,xxx即爲數據表名
- DTO: 數據傳輸對象,service層向外傳輸數據的對象, xxxDTO,xxx爲業務領域相關的名稱
- BO: 業務對象,由Service層輸出的封裝業務邏輯的對象
- VO: 顯示層對象,通常是Web向模板渲染引擎層傳輸的對象, xxxVO,xxx一般爲網頁名稱
-
RPC: 遠程調用框架
- RPC 的方法參數和返回值必須使用包裝類型
-
集合轉數組
- 必須使用集合的 toArray(T[] array),傳入的是類型完全一
致、長度爲 0 的空數組
List<String> list = new ArrayList<>(2); list.add("guan"); list.add("bao"); String[] array = list.toArray(new String[0]);
- 必須使用集合的 toArray(T[] array),傳入的是類型完全一
-
集合有序(sort)和穩定性(order)有序性是指遍歷的結果是按某種比較規則依次排列的。穩定性指集合每次遍歷的元素次序是一定
- ArrayList 是 order/unsort
- HashMap 是 unorder/unsort
- TreeSet 是 order/sort
-
Map 類集合 K/V 能不能存儲 null 值的情況
集合類 Key Value Super 說明 Hashtable 不允許爲 null 不允許爲 null Dictionary 線程安全 ConcurrentHashMap 不允許爲 null 不允許爲 null AbstractMap 鎖分段技術(JDK8:CAS) TreeMap 不允許爲 null 允許爲 null AbstractMap 線程不安全 HashMap 允許爲 null 允許爲 null AbstractMap 線程不安全 -
jdk8新特性
- 遍歷Map使用Map.forEach
- 使用 Instant 代替 Date
- LocalDateTime 代替 Calendar
- DateTimeFormatter 代替 SimpleDateFormat
- Optional 類來防止 NPE 問題
-
註釋
- 對於暫時被註釋掉,後續可能恢復使用的代碼片斷,在註釋代碼上方,統一規定使用三個斜槓(///)來說明註釋掉代碼的理由
異常與日誌
- 在調用 RPC、二方包、或動態生成類的相關方法時,捕捉異常必須使用 Throwable
類來進行攔截 - 避免重複打印日誌,浪費磁盤空間,務必加 additivity = false
- 多層條件語句建議使用衛語句、策略模式、狀態模式等方式重構
mysql
- 表達是與否概念的字段,必須使用 is_xxx 的方式命名,數據類型是 unsigned tinyint(1 表示是,0 表示否),表達邏輯刪除的字段名 is_deleted,1 表示刪除,0 表示未刪除
- 任何字段如果爲非負數,必須是 unsigned
- POJO 類中的任何布爾類型的變量,都不要加 is 前綴,所以,需要在設置從 is_xxx到 Xxx 的映射關係
- 表必備三字段:id, create_time, update_time,其中 id 必爲主鍵,類型爲 bigint unsigned、單表時自增、步長爲 1。create_time, update_time的類型均爲 datetime 類型