參考阿里巴巴Java開發手冊
以下是從手冊中根據自己平時開發經驗提出的比較重要且容易被忽略的幾點
Mysql數據庫設計規約
建表約束
1、[強制]加id,bigint 自增主鍵
2、[強制]加create_date 和modify_date 創建時間和更新時間
3、[強制]加is_deleted 所有刪除都是邏輯刪除
4、[強制]is_xxx 到 類成員變量的xxx 去掉is mybatis-generator可以配置
5、[強制]表單與否概念的字段,必須使用is_xxx的方式命名,數據類型是unsigned tinyint
6、[強制]主鍵索引名爲pk_字段名;唯一索引名爲uk_字段名;普通索引名爲idx_字段名
7、[強制]小數類型爲decimal,禁止使用float和double
8、[推薦]表的命名最好遵循“業務名稱_表的作用”
索引規則
1、[強制]業務上具有唯一特性的字段,即使是多個字段的組合,也必須建成唯一索引
2、[強制]超過三個表禁止用join,最好不要用join,分開查詢加上緩存效果會更好
3、[強制]頁面搜索嚴禁左模糊或者全模糊
4、[推薦]建組合索引的時候,區分度最高的在最左邊 如:idx_companyId_isDeleted
ORM映射
1、[參考]@Transactional 事務不要濫用
Java編程規約
OOP規約
1、[強制]所有DO類必寫toString方法,IED中可以自動生成,如果繼承了另一份DO類,加上super.toString()
2、[強制]使用Objects.equals() 判斷值類型(java.util.Objects#equals), 反例:object.equals(“test”)
3、[強制]BigDecimal 來保存金額等精度較高的數據,並且禁止用 == 做判斷
4、[強制]所有整型包裝類對象之間的值比較,全部使用equals方法比較 Integer Long等
5、[推薦]循環體內 使用StringBuilder 的append方法進行擴展
6、[強制]所有的常量名都應該大寫,格式如BACKEND_URL
7、[推薦]創建constant包,把常量按照類別放入此目錄下,避免一股腦放在一個類中,可讀性差。
集合規約
1、[強制]不要在foreach循環中進行元素的remove/add 操作。請使用Iterator
SpringBoot
1、[強制]controller 封裝統一返回類和返回狀態碼,如Result/ResultBean 避免使用Map,Json。
2、[強制]封裝分頁請求和返回基類,如BasePagingPara、BasePagingResult。
應用分層
應用分層
1、Controller/Web層:訪問控制進行轉發,各類基本參數校驗,xxxController
2、Service層:相對具體的業務邏輯服務層,xxxService xxxServiceImpl
3、Manager層:通用業務處理層(這一層經常被忽略)
1)對第三方平臺封裝的層,預處理返回結果及轉化異常信息
2)對Service層通用能力的下沉,如緩存方案、中間件通用處理
3)與DAO層交互,對多個DAO的組合複用