技術選型:
spring boot(Spring DATA+Spring MVC+slf+jackson), JDK1.8
接口約定
- 使用RestFul API接口;URL中不要使用動詞,如GET,ADD,CREATE等;URL中儘量包含資源唯一標識。參考《互聯網開發常識譜–REST》
- 返回參數分成功和失敗等不同類型的數據格式。
- 成功返回http status200,參數中不要包含的message_code,message等流程控制信息,而是直接對應業務邏輯對象。
- 業務邏輯失敗返回http status 400,返回不同的失敗提示信息和失敗代碼。
異常處理:
- 如果沒有業務邏輯處理,則不要捕獲異常,sevice層避免僅爲打印日常的try-catch。
- 在線程邊界必須捕獲異常輸出日誌,異常日誌輸出必須打印堆棧,並打印關鍵參數。
- 使用ControllerAdvice攔截所有異常,做http狀態轉換,失敗提示信息和失敗代碼轉換。參考《spring boot 最佳實踐(四)–Spring MVC》
- 如果使用異步線程或者自建線程池,必須在線程發起的入口捕獲所有異常,並打印日誌。
業務邏輯編碼:
- 業務邏輯代碼不能寫在controller和DAO中。
- 基礎參數校驗在DTO中定義,在controller參數注入時自動校驗。參考《spring boot 最佳實踐(二)–使用Bean Validation》
- 避免無意義的service層接口聲明,如果一個service只有一個實現就不要抽象出接口。
- Info及以上禁止輸出大對象,但必須打印關鍵參數。參數使用“{}”佔位符而不是用“+”字符串拼接
- 方法體職責單一,減少嵌套層數,一個方法體不能超過100行。
- 禁止在service層通過動態拼接sql字符串查詢DB,使用JPA的Criteria API。
- 禁止魔法數字,儘量使用枚舉類型替代靜態常量。
- 禁止使用類似Constants的全局常量類,領域對象相關的常量在對象實體類中定義,與業務邏輯相關的常量在對應的service中定義。