2010-08-02 34 views
3

我正在編寫一個用戶輸入庫,以便輕鬆管理用於詢問用戶數據的表單的動態創建。我應該在用戶輸入錯誤上拋出異常嗎?

我想讓最終開發者不得不'想'最低限度,所以我去讓他們拋出異常,而不是返回'真'或'假',並記住處理返回值等。

在現實中,它的工作得很好。拋出異常也給我帶來了一個副作用,即能夠自動記錄用戶日誌中的錯誤,全部爲「免費」,因爲創建異常會導致日誌記錄完成。

說了這麼多,我想知道這是否真的「違反最佳實踐」?我是否應該只在沒有預料到用戶輸入錯誤的時候保留異常,或者可以說「用戶的數據有問題......這是一個例外」?

有什麼想法?

回答

10

例外情況是例外情況。

惡意的用戶輸入是預期情況下,和(在我看來),你應該總是試圖驗證並呈現出非異常錯誤消息之前按摩到正確的格式。

+1

是的,我認爲這就是答案:)說實話,我會用我無論如何去,因爲我發現它提供了一個很好的,簡單的方法'讓別人抓住它',如果這是有道理的... – Narcissus 2010-08-03 11:17:41

+0

當用戶嘗試一個他不被允許的非法行爲時,應該有例外情況,例如在StackOverflow中刪除別人的帖子? – 2011-11-07 19:19:13

3

symfony的表單框架驗證器會拋出異常。

我個人認爲這很好,因爲它會迫使開發人員處理來自輸入的錯誤,這顯然很重要。

1

我個人認爲,這與你要處理錯誤的位置有關。如果代碼樹足夠多,Exeption將是明智的。如果你只是捕捉它下面3行,這是浪費資源(它包含完整的回溯),並且'內聯'錯誤處理將會很好,您可以輕鬆添加(相同)日誌記錄功能。

3

我同意Gareth在這一個。不良用戶輸入是預期的條件。

請考慮此問題(這是Java中的常用策略):創建一個Errors類。將這種類型的對象傳遞給驗證器。驗證器可以保持對象不變,或者可以添加一個或多個錯誤消息及其相關字段。將所有驗證器通過後,檢查Errors對象是否爲空,如果不是,請閱讀並再次顯示錶單以及錯誤。

+0

這是一個非常有趣的做事方式:事實上,假設它很容易返工,我最終可能會使用該過程。 – Narcissus 2010-08-03 11:19:07

+0

@Artefacto當用戶嘗試通過操縱網頁代碼而不允許他進行非法操作時,例如,在StackOverflow中刪除別人的帖子? – 2011-11-07 19:22:35

相關問題