實踐中的重構09 多餘的防禦性程式設計 new

2021-08-31 02:40:58 字數 1409 閱讀 6458

眾所周知,防禦性程式設計是乙個程式設計的最佳實踐。良好的防禦性程式設計,可以增強程式的健壯性,但是沒有銀彈,最佳實踐也有乙個適用場景的問題。

試看如下**:

/**

* 異常處理介面。

* */

public inte***ce exceptionhandler

/*** 預設異常處理器。

* */

public class defaultexceptionhandler implements exceptionhandler

@override

public void handle(exception ex) }}

}/**

* 空指標異常處理器。

* */

public class nullpointerexceptionhandler_0 implements exceptionhandler

return false;

}@override

public void handle(exception ex)

if (exception == null)

// 其他處理

}}

這段**是一段很通用的異常處理**,介面的定義很簡潔,abouttohandle方法來確定是否由該異常處理器來處理該異常,handle方法是實際的異常處理方法。defaultexceptionhandler這個異常處理器實際上起著乙個分發異常的作用,是這個異常處理機制的核心。

初看這段**,會認為這段**和大多數的異常處理機制大同小異,沒有什麼問題。細緻的檢查之後,這段**還是有它的缺點的。

1 nullpointerexceptionhandler的abouttohandle方法體不夠簡潔。

2 nullpointerexceptionhandler的handle方法中用了防禦性程式設計,在該特定場景中防禦性**是冗餘的。

一般而言,異常處理系統是作為基礎子系統存在的,不應該被外界的**隨意呼叫。因此,異常處理的具體實現應該信任作為該系統中的核心類(該處為defaultexceptionhandler)的功能。即分發給乙個處理器的異常,一定是可以通過該處理器abouttohandle方法測試通過的,如果該條件不滿足,abouttohandle方法的存在本身也就沒有意義了。該方法本身就是對異常處理器可以處理哪些異常的乙個抽象。

基於以上理解,**修改如下:

/**

* 重構後的空指標異常處理器。

* */

public class nullpointerexceptionhandler_1 implements exceptionhandler

@override

public void handle(exception ex)

}

實踐中的重構01 05

目錄 實踐中的重構01 小方法的細調 實踐中的重構02 的視覺效果 實踐中的重構03 批處理方法預設約定 實踐中的重構04 了解每一行 裝箱的布林值 實踐中的重構05 簡潔的 b 實踐中的重構01 小方法的細調 b 重構的概念已經為廣大的程式設計師所熟悉。但是還是有很多細節可以注意。public s...

譯 PHP中的防禦性程式設計

菲納格動態逆定律 會出錯的,終將會出錯 在最糟糕的時刻。防禦性程式設計,簡單的說,就是在程式設計的時候有目的地 可能的故障點。目的是在那些可能發生的問題發生前解決它們。你看見了問題,對吧?意料之外的事情本來就有內在的難度,當你想要 意料之外的事情並且解決它就更是難上了好幾倍。下面我們看幾個實際的例子...

實踐中的重構03 批處理方法預設約定

最近看 的時候,發現了乙個奇怪的現象。關於呼叫批處理介面的問題。如呼叫乙個查詢使用者資訊的介面為 userinfo getuserinfo string id 則對應的批處理介面為 listgetuserinfobyids listids 很多地方對該返回值進行了校驗,即用for迴圈比對返回的use...