2012-03-06 93 views
4

我正在開發一個應用程序的UI層,並且在發出請求之後,業務層(或更低層)正在引發異常。唯一的例外如下所示我應該在這種情況下捕捉並重新拋出異常嗎?

「的System.Exception:無數據返回的......」

其明顯的有人做這一個簡單的:

if (...Rows.Count < 1) 
    throw new Exception("No Data Returned"); 

現在我玩的理由,我應該嘗試通過試圖重新拋出一個自定義異常,我可以爲這樣專門負責處理清理它:

try 
{ 
    var myBusinessObject = MyBusinessMethod(); 
} 
catch (Exception ex) 
{ 
    if (ex.Message == "No Data Returned") 
    { 
     throw new NoDataException(ex.Message); 
    } 
    else 
    { 
     throw; 
    } 
} 

還是有處理這些更優雅的方式。

請注意,我沒有更改UI層以外的代碼的選項,我希望經常遇到此特定異常。

在此先感謝!

+0

您不能更改底層嗎? – 2012-03-06 22:21:58

+0

我只能請求其他人改變它。 – Khan 2012-03-06 22:23:00

+0

我希望我可以接受倍數作爲答案,但我想我必須爲我的情況提供最大的價值。 – Khan 2012-03-06 22:29:49

回答

2

這是一個有點主觀,但我寧願生活在我的代碼中處理catch (Exception)的醜陋,而不是擔心如果有人將錯誤消息更改爲No Data Returned以外的東西會發生什麼。

+0

!!!!我沒有想到這一點。超值。謝謝! – Khan 2012-03-06 22:24:28

2

我真的認爲這取決於您的電話環境中的例外情況。例如,如果您要求通過名稱或ID加載客戶,則可能只會通過「找不到客戶」對話框向您的用戶報告異常情況。另一方面,如果你試圖加載一些重要的東西,你認爲應該是在那裏,你會得到那個異常,你必須做一些不同的事情。

底線是,它確實取決於問題的性質和嚴重性以及您的客戶對UI的期望。

+0

我明白你的觀點,但就我而言,用戶對應用程序沒有太多的控制。比數據輸入/請求更多的點擊導航。非常好的答案。 – Khan 2012-03-06 22:28:21

2

如果您無法管理或更改較低級別的代碼,則只能通知用戶並請他重試操作或執行其他操作。 您不必向用戶顯示異常消息(如果不需要)。相反,如果可能的話,向業務層發送一條消息,其中包含有關調用的方法和傳遞的參數的信息可能很有用。

1

答案是非常具體的,取決於您的要求和您的應用程序的可用性。

尤其是在用戶界面層,答案很大程度上取決於應用程序的可用性,以及您有哪些框架/系統來處理錯誤。

通常,遠傳播這種錯誤將分爲兩大類:

,用戶應該知道的
  • 問題,和/或顯著影響可用性。這些通常是在決定下一步採取什麼操作(例如,如果在登錄時未找到用戶名,或者您嘗試顯示的數據不可用)之前需要用戶輸入的問題。與其拋棄新的例外情況,通常情況下,您可能會根據系統情況報告錯誤。

  • 用戶不應該意識到的問題,這些問題與系統的正常運作無關,或僅與系統管理員等有關......這些類型的問題通常可以通過重新拋出例外情況,因爲通常情況下,您將擁有一個頂層圖層,用於在sysadmins/etc的某個位置記錄異常。要記錄