2011-03-25 64 views
0

我的經理設計了一個表正是這樣.NET異常從表中查找處理

[異常]
PK | ExceptionId
ExceptionCode VARCHAR(100)
ExceptionDesc VARCHAR(255)
ExceptionMSG VARCHAR(255)

我使用ASP.NET WebForms和使用存儲過程/ ADO.NET數據訪問爲。 現在他不希望我在存儲過程或代碼背後硬編碼驗證,而是要捕獲約束異常消息並在數據庫中查找相同的錯誤消息,並查找我們想要顯示的消息。我想知道他的設計是否會起作用,或者我應該向他解釋這裏有什麼不對。

你認爲什麼人?

+2

似乎對我脆弱。數據庫訪問可能會失敗,在這種情況下,您需要有一個回退並直接顯示異常消息。爲什麼會有額外的間接程度?如果是用於本地化,則可以使用相同的資源(並且它會更健壯)。 – dbkk 2011-03-25 05:44:47

+0

只是在你的catch塊上出現異常...... – Crimsonland 2011-03-25 05:54:20

+0

我也在考慮使用資源。但他希望爲未來的應用做到這一點。實際上該表包含applicationId。 – Sherwin 2011-03-25 06:00:08

回答

3

因此,在方法中沒有任何錯誤 - 實際的錯誤消息字符串將被存儲在某個存儲中而不是硬編碼。這裏選擇的是一個數據庫。該方法應該工作,但我會建議幾件事情:

  1. 錯誤消息應緩存 - 我寧願緩存所有消息在應用程序啓動,而不是按需緩存。
  2. 您可能需要硬編碼與應用程序啓動(例如,無效的數據庫連接字符串等)處理一些消息
  3. 一般來說,除了要查找使用一些正面的消息字符串,如IMessageProvider。在你的情況下,IMessageProvider實現將使用在數據庫應用程序啓動時填充的緩存(字典)。你可以很容易地將這個實現與其他東西交換(也許從資源文件加載等)。您可以考慮使用IOC /依賴注入爲異常對象提供適當的消息提供者實現。
  4. 典型的消息查找實現應該具有故障安全機制 - 例如,如果錯誤代碼不存在,則可以使用硬編碼的字符串,例如「發生了一些錯誤(代碼:xxxx)」,請聯繫你的管理員「。理想情況下,用戶不希望在實時系統中看到此消息。
+1

嗨有趣的提示!我想知道是否應該爲捕獲的表中不存在的每個錯誤代碼插入新的代碼錯誤。 – Sherwin 2011-03-25 06:22:23

2

在我看來,在數據庫中查找異常消息看起來有點愚蠢,考慮到與數據庫連接有關的異常,你不能真正能夠查找消息哈哈。對我而言,在Web服務器上可能會更改一個配置文件(作爲資源)會更有意義,而不會連接到數據庫。然而,在我所做的所有ASP站點中,開發人員都會在他們拋出的異常中小心地做出有意義的消息,以便進行驗證。

我可以看到對可變消息的渴望;不過,我認爲數據庫可能有點矯枉過正。我可能是錯的,儘管......我可能沒有遇到最有意義的情況。但是,如果你的經理絕對堅持這一點,那麼我想你必須讓它工作。我想對連接相關異常的情況感到厭倦。我希望這可以幫到你。

+0

在數據庫中存儲消息是非常有意義的,如果您希望它們可由最終用戶配置。 – VinayC 2011-03-25 06:05:52

+0

啊有趣,我從來沒有在這樣的系統上工作過。我想在這種情況下,這將是可取的。 – 2011-03-25 06:10:02

+1

我遇到過幾個用例:a)典型的LOB,其中應用程序開發由供應商完成,然後更改用戶消息導致向供應商(以及新應用程序構建)發出請求。使用db(或文件)中的消息,供應商或本地IT團隊可以創建腳本來更改消息。如果提供UI,則最終用戶管理員可以更改消息。這縮短了週期時間。 b)考慮允許用戶構建應用程序或自定義用戶界面/工作流程的應用程序引擎/框架。 – VinayC 2011-03-25 06:16:28