在Java中如何使用好Exception
是門藝術。
一般我們常見的有checked異常(Exception
)和unchecked異常(RuntimeException
),區別在于前者在語法層面強制開發者對異常進行處理,后者則不用。
兩種異常的好壞或和使用方式大多還是根據場景而定。
一個現狀
目前接手了一個項目,此項目定位為基礎組件,對外部系統提供REST API服務和對應SDK。
其中SDK的大致邏輯為:
//調用rest api
public Result submit(Object args){
Result result;
Request req = createRequest(args); //構造rest請求
try{
result = doRestRequest(req); //請求http
}
catch(Exception e){
result = new Result();
result.code = -1; //發生異常時設置結果碼為失敗
}
return result;
}
邏輯上沒有問題,調用失敗的場景通過Result.code
告訴給使用者。
從現在分布式微服務應用角度看,遠程調用發生錯誤應該要被認為是一種常態,開發者必須關心發生錯誤的場景。
這樣的SDK封裝往往會讓使用方就會忽略錯誤的場景,直接提交本地事務完成請求,最終造成業務方與基礎組件中的數據狀態不一致。
改進
這種問題發生太多次了,每次都得事后手動處理。所以在下個版本的SDK中,打算使用Exception
進行改造。
//調用rest api
public Result submit(Object args) throws Exception{
Request req = createRequest(args); //構造rest請求
try{
return doRestRequest(req); //請求http
}
catch(Exception e){
throw new Exception(e); //此處可以對異常做一個封裝
}
}
這樣至少在代碼層面上提示使用方必須處理錯誤的場景,進行數據回滾和在界面上進行提示。
最后編輯于 :2017.12.10 04:04:36
?著作權歸作者所有,轉載或內容合作請聯系作者 平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。