介紹ASP.NET異常管理
在任何應(yīng)用系統(tǒng)開發(fā)中,ASP.NET異常管理對開發(fā)人員來說都是一個關(guān)鍵領(lǐng)域。作為一個開發(fā)人員,你應(yīng)該采用一種合適的、能讓你編寫健壯且高質(zhì)量代碼的異常管理策略。如果使用得當(dāng),異常管理將是一個很強(qiáng)大的概念而且使你的開發(fā)工作變的很容易。然而,一個不合適的異常處理將會使你的應(yīng)用系統(tǒng)性能降低。
在你鉆研這些之前,要先搞清楚ASP.NET異常管理是什么,這點很重要。一般來說異常就表示“打破系統(tǒng)預(yù)定的假設(shè)”?!爱惓!焙汀板e誤”是不一樣的,為了解釋清楚,我們來看兩個例子:
示例一
我們假設(shè)你試圖向一個文件寫入數(shù)據(jù),而你的應(yīng)用程序也認(rèn)為這個文件在正確的路徑上。如果不在,就會拋出一個異常。而話說回來,如果你的職責(zé)是跟蹤此文件,那么代碼里還有(找不到文件的)異常那將是一個不好的編碼習(xí)慣,這種情況應(yīng)該被校驗代碼處理(而不是異常)。
示例二
再讓我們假設(shè)一個一般的ASP.NET程序中,你正試圖更新數(shù)據(jù)庫中所有必需的字段。你的應(yīng)用程序認(rèn)為此數(shù)據(jù)庫連接可用,假設(shè)實際上這個連接是不可用的……拋出異常是一個解決方案。而我們又把話說回來,如果更新數(shù)據(jù)庫的必填字段時出現(xiàn)有幾個值為空的字段,那拋出異常就沒有必要了,這些處理應(yīng)該由校驗代碼完成。
如何處理異常
作為一個開發(fā)人員,你應(yīng)該感受到通過try, catch, finally塊來構(gòu)建一個結(jié)構(gòu)化異常處理機(jī)制的優(yōu)點。.NET框架提供了一大堆異常處理層次來處理不同種類的異常。所有的異常都繼承自 Exception(基類)。你可以通過繼承來實現(xiàn)自定義錯誤處理以擴(kuò)展異常處理機(jī)制。不幸的是,很多開發(fā)人員都誤用了這種架構(gòu)能力。一個隨時要記著的事是當(dāng)一個異常發(fā)生在運行時時(這個架構(gòu))應(yīng)該如何運作?一般有以下三種情況:
忽略異常,讓它在調(diào)用棧里上升而被其它的catch塊捕獲。
捕獲異常,同時為你的應(yīng)用程序執(zhí)行必要的動作,如果你不想再次在異常中拋出異常的話。
捕獲異常,并用其它異常覆蓋它。這樣和你的應(yīng)用程序有更密切的關(guān)系。異常覆蓋是為了避免打破(架構(gòu)中的)抽象層次。你可以通過你拋出的異常的 InnerException屬性指定原異常是什么,這樣就可以把你現(xiàn)有的異常用一個新的異常來覆蓋了(更與你系統(tǒng)有關(guān)的)。為了了解異常覆蓋,讓我們來看一個能引起IOException異常的方法,你可以在應(yīng)用級別使用LoadingException 或 FailtoLoadInfoException來覆蓋原有的IOException異常,這樣比把底層的IOException給用戶看到要來的好些。
一個應(yīng)用程序的異常處理框架應(yīng)該有以下幾種(要求):
探測異常:
◆執(zhí)行代碼清除;
◆內(nèi)部異常覆蓋;
◆內(nèi)部異常替換;
◆記錄并報告錯誤信息;
◆建立能被外部監(jiān)視的事件以幫助系統(tǒng)操作;
在開始你應(yīng)該建立一個一致的,健壯的ASP.NET異常管理架構(gòu),在你所有的系統(tǒng)中應(yīng)該很好的封裝并抽象其記錄和報告等的細(xì)節(jié)。
【編輯推薦】