最近,我一直在閱讀如何正確處理異常以改進我的軟件(避免捕獲泛型異常和所有異常),但我仍然有點困惑。這是我目前所做的(違反了一些良好的做法,或者可能都是)Web應用程序,在這裏使用示例來捕獲異常的正確方法是什麼?
ASP.NET web應用程序調用業務層,它返回調用數據訪問層。使用的日誌框架是log4net,它會在發生異常時記錄下來給我發電子郵件。
數據訪問層捕獲泛型異常(是的,不好,因爲我不知道網絡是否可能是問題,或者如果存儲過程的輸入是錯誤的類型等)將其記錄爲致命的然後「扔」; (保持堆棧跟蹤)。
catch(Exception ex)
{
log.Fatal("Exception occurred while inserting task into database",ex);
throw;
}
* 注意,我的數據訪問層假定所有輸入驗證在上層做,但有時候,我錯過檢查一個或兩個參數。
業務層捕獲「通用」的異常,以及(包括數據訪問除外),然後圍繞一個新的異常包裝在
catch(Exception ex)
{
log.Fatal("Exception occurred while creating the task ", ex);
throw new exception("There appears to be an error while doing [name of business operations]", ex)
}
Web應用程序層捕獲從業務層的任何異常並顯示錯誤信息。
catch(Exception ex)
{
//show Ex.Message to the user on the current UI.
}
此外,爲了將用戶重定向到一個通用的「接觸管理」的錯誤頁面一個全球性的錯誤消息。
從我看過的所有內容看,似乎我所做的一切都是錯誤的。在這種情況下,使用上面的例子,我應該如何正確處理每個級別的異常?
- 數據訪問
- 業務層
- Web應用程序