Enterprise LibraryV1.0-異常處理應用程式塊使用說明

來源:互聯網
上載者:User


其他幾個應用程式塊的使用說明串連如下:
Enterprise LibraryV1.0-概述  
Enterprise LibraryV1.0-配置應用程式塊
Enterprise LibraryV1.0-安全應用程式塊使用說明
Enterprise LibraryV1.0-資料應用程式塊
Enterprise LibraryV1.0-日誌應用程式塊使用說明
Enterprise LibraryV1.0-加密應用程式塊使用說明

1、簡介

只要是編寫代碼,我們就會面對異常處理的問題。系統預定義異常由於肩負著提示、調試等很多功能,因此當異常發生時,會有非常詳細的異常資訊。當我們編寫商用程式時,如果程式出現運行時異常,顯示給使用者的資訊都要求是user-friendly的,而不是系統級,特別是系統預定義異常會deliver一些敏感資訊,如果被別有用心的人擷取,是非常危險的,所以當異常出現時,我們要屏蔽掉這些敏感資訊。對異常的處理一般有四種方式:
根據源異常建立一個新異常,重新將此新異常拋出。
取代源異常,拋出一個別的異常。
Log異常,用於查看、排錯等。
不做任何處理,只是將傳播路徑截斷。
雖然AOP是異常處理最佳方案,但技術上遠未成熟,我們都還是用傳統的方式來處理異常。對應這幾種情況,我們一般都會這樣來處理:

 1) //  提示使用者的處理方式,出錯後提示使用者
try
{
    // 正常執行語句;
}
catch(Exception ex)
{
    String formattedInfo = FormatException(ex);
    Logging.Log(formattedInfo); // 或Logger.Log(e);
Throw new MyException("出錯了。");
// 或者直接提示客戶
//MessageBox.Show(errorMsg, "Application Error", MessageBoxButtons.OK, MessageBoxIcon.Stop);
//lblError.Text = errorMsg;
}
2) // logging,出錯後作記錄
catch(SomeException e)
{
    string formattedInfo = FormatException(e);
    Logger.Log(e);

    throw e;
}

3) //replace,拋出一個新異常,屏蔽掉敏感資訊
catch(SomeException e)
{
    CustomException myException = new CustomException(“XXXXXXXXXXXXXXXXXXXXXX”);

    throw myException;
}
4) //wrapping 包封原來的異常,添加Context資訊後,重新拋出
catch(SomeException e)
{
    CustomException myException = new CustomException(e);

    throw myException;
}
5) //propagating 記錄後,繼續傳播之
catch(SomeException e)
{
    // Exception handling code to be done before propagating
    string formattedInfo = FormatException(e);
    Logger.Log(e);

    throw e;
}
一般來說,象上面這樣的處理方式都非常不靈活,有極大的代碼重複,當要求發生變化時,可能原始碼要做大量的機械修改。
異常處理應用程式塊在充分滿足上述異常處理要求的基礎上,使我們在不同項目之間、同一個項目的不同開發人員之間建立起了統一的異常處理策略。當需求發生改變時,我們可以用組態工具進行修改設定檔,不用去修改源碼,從而不用重新編譯、發布程式。
我們知道,在.Net裡一個異常發生時,系統會拋出一個Exception類型或其子代的對象,習慣上我們要對這個對象進行一些處理,以排除錯誤或提示使用者,常見的處理方式有提示使用者、封裝後重新拋出、用另一個異常對象取而代之、記錄等。EHAB就是根據這樣的要求而設計的,但她並不負責具體如何處理,而是做了大量基礎工作,使對異常的處理非常簡單,同時統一了處理策略,增加了靈活性。
下面我們以常用的異常處理方式來說明異常處理應用程式塊的用法,來看看使用EHAB是多麼簡單
2、用配置控制台配置異常處理應用程式塊
①添加異常處理應用程式塊
添加異常處理應用程式塊後,就要添加一個或多個Exception Policy。一個異常處理應用程式塊可以維護一個或多個Exception Policy,異常處理策略往往代表了對異常的處理方式,常見的策略有包封、取代、繼續傳播、處理並繼續、記錄等等,當然異常處理策略如何分類、有哪些異常處理策略,都是你自己說了算,只是取一個比較有意義的名字就行了。
每種Exception Policy可以管理多種類型的異常,而每種類型的Exception又可以有多個Handler(異常處理器,在Exception類的繼承階層中,可以針對每種類型的Exception設定一個Handler,這樣一個子代Exception就可以有多個Handler)。
②添加Exception Policy
添加幾個Policy,適當修改Policy的名稱,如Wrap Policy、Replace Policy、Log Policy、Propagate Policy、GlobalPolicy等。
③給每個Policy添加幾個Exception
當添加一個Exception類型時,我們不用自己鍵入,嚮導會提示我們選一個,這個異常類型可以是系統預定義的,也可以是來自某個程式集的,還可以是我們自己定義的。
我們按自己的需要給每種Policy添加好Exception。然後針對每種類型的Exception設定處理活動PostHandlingAction。PostHandlingAction有三種分別是None、NotifyRethrow、ThrowNewException。
None表示此異常被內部處理掉了,調用者不用再處理了。
NotifyRethrow表示Application.ThreadException事件的處理器將重新拋出異常。
ThrowNewException表示這類異常你可以用一個新的異常類包封或取代之。
④設定Exception的處理器handler
每個Exception一般都會設定一個或多個handler,當然也可以不設。Replace Handler要設定好其取代的異常類型,Wrap Handler也要置好其包封的異常類型,Log Handler要置好LogCategory。
⑤設定完畢,儲存。

3、寫代碼
String policy = “Wrap Policy”;
Try
{
// 。。。。。。。
}
catch (Exception ex)
{
    if (ExceptionPolicy.HandleException(ex, policy))
    throw;
}
其他類型Policy的代碼與此類似,但異常的PostHandlingAction設為NotifyRethrow時,我們要將定義一個異常處理handler,並掛接到Application.ThreadException事件上。我們可以看到,對異常的不同處理方式其代碼是一致的,而不象開始時我們列出的代碼,不同的處理方式代碼是不同的。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.