2010-03-12 58 views
4

我們使用C#語言來開發Windows應用程序。我們如何以及在哪裏編寫try catch塊來處理異常

我們的windows應用程序由三層(UI,Business和DataAccess層)組成。在業務層中,有一些公共(業務)方法通過它們與業務層類進行通信。這些公共方法也有一些私有方法來實現所需的功能。 DataAcess層中有一些方法是從業務層類調用的。

在這種情況下,我應該在哪裏試試趕上? a)在業務層公共方法 b)在繁忙層私有方法 c)在DataAccess層方法 d)在調用業務方法的UI方法中。

+0

查看http://stackoverflow.com/questions/tagged?tagnames=exception-handling%2bc%23 – 2010-03-12 06:14:59

回答

-2

您應該在每個有風險的位置使用try catch塊來引發需要可變的異常。

+1

-1:我不知道你是什麼意思的「可變」,但你絕對不應該捕獲所有例外。 – 2010-03-12 06:09:13

+0

通過mutable我的意思是 - 不影響下一個代碼,不冒泡給用戶。我需要一個不同的單詞...... – 2010-03-12 22:32:28

3

你應該只在你期望它們時處理異常,並且想用特定的東西來做某件事。否則,國際海事組織,最好讓他們冒泡層,所以你有一個完整的堆棧跟蹤。即使在表示層,我也傾向於讓錯誤冒出來(即轉到友好的錯誤屏幕),除非它是我特別期待的例外。

有例外的一般規則是檢查你的輸入,以避免它們,預測你期望得到的結果,並讓其他所有東西都例外並拋出錯誤。錯誤和棧跟蹤是一件好事。他們讓你知道什麼是錯的,哪裏出錯了。如果給定圖層掩蓋其錯誤,則幾乎不可能確定哪裏出錯。

0

異常很難。

您應該只抓住你期望發生的那些,和你預期應該在抽象的層面,它知道它正試圖完成的,而不是較低的一個,只是知道一個小的任務被抓的那些任務的一部分。

例如,您有一個保存臨時文件的功能。該函數調用函數,例如,生成臨時文件名,保存文件,然後返回臨時文件路徑。

如果文件保存功能發現您給它一個目錄中已經存在的文件名,那麼該函數就不應該處理它。它不知道如何命名臨時文件。您調用的保存臨時文件的函數應該可以處理它 - 它知道如何命名文件,並知道您可能會創建一個重複的文件。所以,你可以生成一個新的名字,然後再試一次。

功能new_temp_file: 嘗試: 名= generate_temp_name() save_temp_file(名稱) 回報名 抓ExistingNameError: 回報new_temp_file()

如果你發現任何比這還高,再高的水平抽象知道太多關於下層。

這只是一個簡單的例子,但我希望你能得到我所說的哦 - 如此含糊地說:捕獲一個異常應該被捕獲的異常。