異常處理策略與重構

2021-07-05 22:37:23 字數 1611 閱讀 3451

系統異常可以分為兩大類:業務類異常技術類異常。顧名思義,業務類異常可以理解為在進行業務邏輯處理時,出現的異常。如建立客戶訂單時,發現沒有為這個客戶設定**;取款時,取款金額大於帳戶餘額等。

技術類異常就更好理解了,這一層是與技術人員相關的,對系統使用者而言,應該是透明的。如無法正確連線資料庫;訪問陣列或是列表時,索引超出範圍;進行計算時,除數為零等。

針對不同類型別的異常,我們會採取不同的處理策略,請參照下表。

可**異常不可**異常

業務類異常

技術類異常

在講異常重構之前,我們先看下面這段**

public void writefile(string filename, string data)
這樣的寫法是無法通編譯的,因為在filewriter的write方法定義的時候宣告了丟擲ioexception異常,編譯器要求我們必須在呼叫的地方處理這個異常。

public void writefile(string filename, string data)   catch (ioexception e) 

}

或是在我們自定義的方法頭中明確宣告此異常。

public void writefile(string filename, string data) throws ioexception
或是在呼叫的地方處理此異常。

對於第一種作法,我們並沒有對異常進行作何處理,只是使用try catch語句捕獲異常,並註明todo,待日後處理,但是時間一久,很容易就被遺忘了。有的小夥伴可能會說在catch語句中使用繼續將該異常丟擲

public void writefile(string filename, string data)   catch (ioexception e) 

}

這樣的做法不可取,因為這會讓問題又回到了原點,在呼叫writefile的函式中還是要處理我們丟擲的異常呀!

第二種方法,和使用throw e異曲同工,同樣是不處理異常,將其再次向外傳遞。

這時候就需要考慮對異常處理進行重構。我們先定義乙個未處理的異常類。

/**

* * @author chris mao(zibing)

* */

public class unhandledexception extends exception

public exception getexception()

public string getmessage()

}

然後再將文章一開始提到的**改為如下。

public void writefile(string filename, string data) throws unhandledexception   catch (ioexception e) 

}

這樣既可以達到快速開發的要求,又可以確保日後不會忘記對這個異常的處理。

譯 Java異常處理策略

在本文中,我們介紹了在oop應用中處理異常的常見策略,這些策略符合最佳的異常處理技術,可以在任何應用中使用。下圖提供了策略概述,它展示了從檢測階段到處理階段的異常處理流程。該圖需要從下往上進行閱讀 error detection 在策略的底部是錯誤檢測,這是發生異常的地方,它要麼由程式進行檢測,要麼...

異常處理 try與except處理異常語句

def convert numbers s try return int s except valueerror return nonetry except介紹 與其他語言相同,在python中,try except語句主要是用於處理程式正常執行過程中出現的一些異常情況,如語法錯 python作為指...

機房重構 策略模式

剛開始學習策略模式的時候雖然書是看懂了但是有乙個問題就是不知道如何去實際的應用,通過機房重構中下機消費金額的計算懂得了如何的去使用這個策略模式。它定義了演算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓演算法的變法,不會影響到使用演算法的客戶。dim cashsuper as bc cash...