背景
之前有介紹我們業務中統一了異常處理,創建了StatusException,因為我們只能對外拋出StatusException,否則調用方就要考慮異常的處理方式,這是一種具有壞味道的代碼,於是我們可能用用try catch包一層,然後捕獲Exception,然後拋出統一的StatusException。這樣是不是要每個方法都要做一次try catch呢? 大家是不是也想過AOP等方式呢?
今天給大家介紹一種設計模式-模板方法來解決這個場景,可能比較適合,但不是唯一的方式,
代碼實戰
定義錯誤狀態枚舉,兩個屬性,錯誤碼和描述
統一異常定義,所有業務或接口,返回除了正確的返回值,只能返回該異常信息,不允許返回其他異常(開發要求,非必須)
定義error靜態方法,參數為ErrorStatus,返回自定義的異常
此處劃重點,考試要考,哈哈
模板中三個方法,還涉及到泛型
checkParam:用於校驗參數
process:需要實現的方法
execute:模板執行方法:該方法定義了方法的執行順序,並對方法進行了異常捕獲,然後拋出統一StatusException
再看業務代碼實現邏輯
重點看save方法
1的位置為覆蓋了checkParam,對參數進行校驗,校驗失敗拋出統一的StatusException
2的位置為save方法的實現邏輯機返回值
3的方法為調用了模板方法的執行方法,調動執行方法就按照模板方法中的順序執行,如果遇到異常統一拋出
通過這個模板方法就解決了每個方法都要try catch的壞味道,當然也可以通過aop方式實現,見仁見智,解決問題最重要
閱讀更多 BeginCode 的文章