2009-12-21 69 views
1

如果我有一個多層Winform應用程序,例如演示文稿,業務和數據層,並且在業務層或數據層中遇到錯誤,是記錄錯誤並通知用戶發生錯誤的地方應該在哪裏進行記錄?多層WinForm應用程序中的錯誤處理

我應該把公司在經營中嘗試catch塊的方法和數據層,像這樣

try 
{ 
    DoSomethingThatMightGiveErrors(); 
} 
catch(Exception ex) 
{ 
    logger.log(ex.ToString()); 
    throw; 
} 

或者我應該讓錯誤冒泡的表示層和處理記錄和通知用戶那裏?

回答

3

我把日誌記錄在業務層級,然後重新拋出錯誤。如果這個圖層將來在另一個項目中使用,它已經在進行日誌記錄。重新生成異常允許該層的消費者將錯誤轉換爲友好的消息。

編輯:我認爲這取決於記錄的種類:如果您登錄到獨立於UI的中央數據庫,請將日誌記錄放入業務邏輯層。如果日誌記錄特定於用戶界面,例如將日誌文件寫入應用程序的目錄,請將其放入用戶界面。

0

這取決於您的要求,例如,您是否想要將用戶從應用程序中關閉,因爲通過冒泡到表示層顯示錯誤?這些錯誤在意外情況下多久出現?

這是一個加載的問題,每個應用程序都是不同的,我可以說最基本的東西是在業務/數據層中使用try catch子句,並確保通知用戶某些情況下可能出現錯誤預計(你有這在文檔?)

除此之外,檢查與最終用戶的要求和反饋...如果你讓錯誤出現在表示層,最壞的情況是用戶將拒絕由於錯誤噴出...

希望這可以幫助你, 最好的問候, 湯姆。

2

如果您正在討論未處理的(與業務無關的)異常,只需讓它們傳播到可以捕獲/記錄/通知用戶的UI層即可。

+0

這就是我會說的。但Gerrie的回答也很好 – 2009-12-21 18:13:37

1

我的選擇是將其放置在業務層中。

  1. 如果你改變 展示層(即 的WinForms到Web表單)的性質日誌 代碼不需要被複制。
  2. 所有的日誌記錄都會更容易找到和維護,因爲您總是可以掃描業務類的方法列表並檢查/調整日誌記錄。如果將日誌記錄放置在表示層中,日誌記錄調用將分散到各個地方 - 單個業務類可以在許多不同的表示類中進行日誌記錄調用。