自從微軟推出了應用程序塊,我已經碰到誰使用Exception Handling Application Block人。我最近仔細看了一下自己,總結了如下基本功能(如果您已經知道它的作用,請跳過以下代碼塊):微軟異常處理塊 - 它不是一個完美的例子嗎?
異常處理應用程序塊旨在集中並完全配置配置文件以下key exception handling tasks:
- 日誌作爲例外
- 更換異常
- 包裝紙的異常
- Propa門控的異常
- 等
該庫是由有您修改的try catch塊如下:基於什麼是在app.config中指定了策略名
try { // Run code. } catch(DataAccessException ex) { bool rethrow = ExceptionPolicy.HandleException(ex, "Data Access Policy"); if (rethrow) { throw; } }
(see here for docs),HandleException要麼...
- 拋出一個完全新的異常(取代原來的除外)
- 包裹原始異常在一個新的並拋出
- 吞異常(即什麼都不做)
- 有你重新拋出了原來的異常
此外,您還可以配置它事先做更多的東西(例如日誌除外)。
現在這是我的問題:我完全無法看到如何使它可配置是否有利於是否替換,包裝,吞下或重新排除異常。根據我的經驗,這個決定必須在你寫的代碼,因爲你通常會變更時,異常處理行爲改變周圍或調用代碼時進行。
例如,當您重新配置時,您的代碼可能會開始出現錯誤行爲,從而導致特定點拋出的特定異常現在被吞下而不是重新排出(catch塊之後可能有代碼,發生異常)。異常處理中的所有其他可能更改也是如此(例如,替換 - >重新拋出,吞下 - >換行)。
所以,我的底線是,異常處理模塊,解決了真的不存在實踐問題。異常日誌記錄和通知位是好的,但不是所有其他的東西只是過度工程的完美例子嗎?
好問題。 +1。還在http://stackoverflow.com/questions/438073#438230中添加了「異常消除搭配」的參數。你能檢查出來嗎? – VonC 2009-01-14 19:48:27