標籤:exce 管理員 cti 定義 user tca pre border otf
一、分析
異常需要封裝,但是僅僅封裝還是不夠的,還需要傳遞異常。一個系統的友好型的標識,友好的介面功能是一方面,另一方面就是系統出現非預期的情況的處理方式了。
二、情境
比如我們的JEE項目一般都又三層:持久層、邏輯層、展現層,持久層負責與資料庫互動,邏輯層負責商務邏輯的實現,展現層負責UI資料的處理。
又這樣一個模組:使用者第一次訪問的時候,需要持久層從user.xml中讀取資料,如果該檔案不存在則提示使用者建立之,那問題就來了:如果我們直接把持久層的異常FileNotFoundException拋棄掉,邏輯層根本無從得知發生任何事情,也就不能為展現層提供一個友好的處理結果,最終倒黴的就是展現層:沒有辦法提供異常資訊,只能告訴使用者“出錯了,我也不知道出了什麼錯了”—毫無友好性而言。
正確的做法是先封裝,然後傳遞,過程如下:
1.把FileNotFoundException封裝為MyException。
2.拋出到邏輯層,邏輯層根據異常代碼(或者自訂的異常類型)確定後續處理邏輯,然後拋出到展現層。
3.展現層自行確定展現什麼,如果管理員則可以展現低層級的異常,如果是普通使用者則展示封裝後的異常。
異常封裝如下:
- public classIOException extends Exception{
- //定義異常的原因
- publicIOException(String message){
- super(message);
- }
-
- //定義異常原因,並攜帶原始的異常
- publicIOException(String message,Throwable cause){
- super(message,cause);
- }
-
- //保留原始異常資訊
- publicIOExcepiton(Throwable cause){
- super(cause);
- }
- }
鏈中傳遞異常代碼如下:
- try{
- //DoSomethind
- }catch(Exceptione){
- //這種形式也可以叫異常轉譯,調用者獲得該異常後在調用getCause()方法即可獲得Exception的異常資訊,如此即可以方便尋找異常的根本資訊,便於解決問題。
- thrownew IOException(e);
- }
三、建議
異常需要封裝和傳遞,我們在進行系統開發的時候,不要“吞噬”異常,也不要“赤裸裸”的拋出異常,封裝後在拋出,或者通過異常鏈傳遞,可以達到系統更健壯、友好的目的。
新技術,新未來!歡迎大家關注
“1024工場”服務號,時刻關注我們的最新的技術訊息!
(甭客氣!盡情的掃描或者長按!)
Java提高:採用異常鏈傳遞異常