31天重構學習筆記25 引入契約式設計

2021-09-01 18:58:55 字數 1060 閱讀 1145

正文:契約式設計規定方法應該對輸入和輸出進行驗證,這樣你便可以保證你得到的資料是可以工作的,一切都是按預期進行的,如果不是按預期進行,異常或是錯誤就應該被返回,下面我們舉的例子中,我們方法中的引數可能會值為null的情況,在這種情況下由於我們沒有驗證,nullreferenceexception異常會報出。另外在方法的結尾處我們也沒***會返回乙個正確的decimal值給呼叫方法的物件。

using system;

using system.collections.generic;

using system.linq;

using system.text;

namespace lostechies.daysofrefactoring.samplecode.day25_designbycontract

}}

對上面的**重構是很簡單的,首先我們處理不會有乙個null值的customer物件,檢查我們最少會有乙個product物件。在返回訂單總和之前先確保我們會返回乙個有意義的值。如果上面說的檢查有任何乙個失敗,我們就丟擲對應的異常,並在異常裡說明錯誤的詳細資訊,而不是直接丟擲nullreferenceexception。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using microsoft.contracts;

namespace lostechies.daysofrefactoring.samplecode.designbycontract.after

}}

上面的**中新增了額外的**來進行驗證,雖然看起來**複雜度增加了,但我認為這是非常值得做的,因為當nullreferenceexception發生時去追查異常的詳細資訊真是很令人討厭的事情。

總結:微軟在處理**乃至產品的時候,很喜歡應用此重構,你如果認真看它的**庫,認真看一下wcf的設計,就不難發現了。這個重構建議大家經常使用,這會增強整個系統的穩定性和健壯性。

31 天重構學習筆記25 引入契約式設計

摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有 訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專...

31 天重構學習筆記23 引入引數物件

摘要 由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有 訂閱 sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都 在使用,只是我們沒有專...

31 天重構學習筆記索引

由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2009年10月份,由於當時沒有訂閱sean chambers的blog,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都在使用,只是我們沒有專門把它標示和...