良好的異常資訊展示,開發運維人員能快速定位問題。
響應外部呼叫異常時,應能明確指明是內部異常還是呼叫條件不滿足導至。
響應使用者操作異常時,能友好的提示使用者。
如何做到以上3點?
內部異常
資源環境導致(系統環境異常、資料庫連線超時、第三方服務響應超時)
第三方服務錯誤響應
第三方響應結果錯誤
外部傳入引數非法
錯誤的編碼邏輯
錯誤的配置
異常的業務資料(業務資料缺失)
業務異常
使用者操作錯誤
業務條件不滿足
方法入參進行合法性驗證。
對系統外部提供的介面,是必須要進行引數驗證(必須)
系統內部對外外層提供介面,進行驗證
工具類進行引數驗證
public 方法要進行驗證
private 方法(不建議引數驗證)
第三方響應結果合法性驗證。
獲取第三方法結果後,根據你們的約定進行驗證。
業務處理前,對業務業務前置條件進行驗證。
業務處理前,驗證業務條件(驗證佘額、驗證這個帳戶有沒有被公安門鎖定)
要考慮效能成本(驗證身份證號碼是不是存在的)
業務處理後,對處理結果進行驗證。
驗證對方帳戶是不是到帳了,轉出帳戶是不是成功扣款
對於可能會出現異常的**進行 try catch 捕獲。
嘗試恢復處理
直接丟擲
轉換後丟擲
統一攔截的目的是確保出去的異常是可控的, 呼叫方能夠明白的異常資訊。
這裡出口是指系統對外統一響應邏輯,一般我們可分三類場景
web response
內部異常:引導至異常提示頁。
業務異常:返回對應提示訊息至前端。
未知異常:嘗試進行認別,如果認識不了,轉換成 編碼異常(bug)。
http api 介面響應
內部異常:返回介面不可用訊息。
引數錯誤:基於api文件中的異常列表進行進行響應返回。表明引數非法,需要呼叫方加強引數合法性驗證
業務錯誤:基於掊口約定反回對應code與訊息。
rpc service 響應
內部異常:返回服務不可用訊息
引數錯誤:基於介面文件進行響應,直接返回異常堆疊。
業務錯誤 :直接返回異常堆疊。
如果是引數非法丟擲,返回結果非法(即軟體bug) uncheckedexception
如果你認為呼叫方程式設計師需要有意識地採取措施,那麼丟擲檢查型異常。
程式產品有明確的條件約束的要求,可宣告檢測型業務異常
基於分包表示異常的分類,不建議使用繼承
如果繼承並不能直觀的知道此異常為什麼型別
業務異常可以新建包serviceexception
系統異常可以新建包systemexception
建立異常來類定義業務異常,不建議使用code來定義
建議使用列舉型別
使用列舉來表示業務異常的幾種結果,不建議使用code
3.31 統一對異常進行攔截處理
目的:防止不明確的異常流出系統
rpc service 響應攔截
web control 響應攔截
http api 響應攔截
直接勿略異常(不推薦):
try catch (unsupportedencodingexception e)
try catch (unsupportedencodingexception e)
業務異不提供任何資訊
public class duplicateusernameexception extends exception給每個異常處理都定義乙個code
用乙個統一異常替代所有業務異常(不推薦)
public class serviceexception extends runtimeexception錯誤:1 、必須明確定義業務異常 2、 盡可能申明成checkedexception 3要帶上具體的業務數public serviceexception(string message)
}
正確方式:定義明確的業務異常
索引設計規範原則
1 原則上表索引的個數不能超過5個 2 原則上單個欄位上的索引不能超過2個 3 原則上覆合索引引用的字段不能超過3個字段 4 原則上分割槽表的索引型別全部使用local索引 5 配置資料類的表,如資料量比較少,除了主鍵外原則上不建索引 6 介面類和工單類的表,盡可能減少索參數量或者不建索引 7 索引...
安全設計規範 資料中心設計規範(消防與安全)
1.消防與安全 1.1.一般規定 1 資料中心防火和滅火系統設計,除應符合本規範的規定外,尚應符合現行國家標準 建築設計防火規範 gb50016 氣體滅火系統設計規範 gb50370 細水霧滅火系統技術規範 gb50898和 自動噴水滅火系統設計規範 gb50084,並應按本規範附錄a的要求執行。2...
密封槽設計標準 密封系統設計規範
1 適用範圍 本規範適用於m1,n1類汽車密封系統的設計。2 引用標準 下列檔案中的條款通過本標準的引用而成為本標準的條款。凡是注日期的引用檔案,其隨後所有的修改單 不包括勘誤的內容 或修訂版均不適用於本標準,然而,鼓勵根據本標準達成協議的各方研究是否可使用這些檔案的最新版本。凡是不注日期的引用檔案...