2013-03-28 74 views
3

我想知道是否有一種很好的方法將系統生成的錯誤轉換爲對用戶更有意義的東西。例如,如果由於某種原因應用程序無法連接到SMTP服務器。我想將由系統拋出的消息(如「SMTP連接失敗」)轉換爲「我們無法給您發送電子郵件」。這個我想從資源文件中拉出的友好消息。雖然這是一個例外,但可能還有更多。將系統錯誤轉換爲友好的消息

我們沒有跨越所有圖層的try catch塊。它僅存在於UI層。我們有一個異常管理類,它接受所有異常並從中返回一個友好的字符串。 UI層中的每個catch塊都會調用此異常管理類,並向其傳遞一個System.Exception類型的異常,該異常的方法需要返回用於UI的友好錯誤字符串。

現在我唯一能想到的方法是在異常管理類中有一個大的IF ELSE塊,用於檢查接收到的異常字符串並從資源文件中提取一個匹配友好的消息。

有沒有更好的方法來解決這個問題?

+1

IMO,這是一個很好的方法。資源文件或數據庫表,簡而言之,您有一個佔位符,您可以在其中映射錯誤代碼,也可以在您的自定義友好消息中使用技術錯誤消息。對於未映射的消息,您可以爲用戶提供一個通用友好的消息。 – 2013-03-28 05:43:11

回答

1

這就是爲什麼你有trycatch來捕捉例外。只是使用它與特定的錯誤類型,而不是通用的錯誤類型。那麼你可以在catch塊中顯示任何消息。但不建議在catch塊內重新拋出自定義異常。在你的情況下,你可以趕上System.Net.Mail.SmtpException

+0

我們有一個異常管理類,它接受所有異常並從中返回一個友好的字符串。每個catch塊都會調用此異常管理類,該類的方法返回用於UI的友好錯誤字符串。 – user20358 2013-03-28 08:27:23

+1

不要讓異常管理類的友好信息取決於異常text.indic儘量使用異常類型。 – 2013-03-28 08:40:52

0

我不認爲你可以映射到用戶友好的錯誤異常。原因是一個例外是「發生了什麼」,發生在一個相當低的級別,而用戶只想知道發生了什麼,以及他們可以做些什麼來修復它。將FileNotFound映射到「系統試圖訪問不存在的文件」將無濟於事。取而代之的是,獲取FileNotFound,然後根據應用程序的狀態顯示相關消息 - 意志。

另一個想法是爲每個進程提供不同的錯誤消息,這些錯誤消息可能會失敗並顯示該進程期間拋出的任何異常的錯誤消息。如果您對流程和您的嘗試進行細化,您將能夠爲用戶提供更好的通知系統,比將系統錯誤消息映射到用戶可理解的錯誤消息更好。