我剛剛遇到了一個捕獲異常(所有異常;我知道這是不好的,但這裏不相關)的屬性setter,並且只有會記錄它們。首先,我認爲它應該再次通過他們;爲什麼要等待崩潰和日誌研究,當你可以馬上知道有什麼事情是錯誤的?我的主要問題是,我是否對無效的日期值進行驗證,向我的文檔上的ValidationRules對象添加一個RuleViolation對象,或拋出一個InvalidDate異常,或者讓CLR爲我拋出異常(無效日期只是無效的日期,沒有檢查範圍等)異常與驗證
異常與驗證
回答
只要方法或類成員無法完成設計要完成的任何任務,就應拋出異常。
因此,對於屬性setter,如果setter無法設置屬性,那麼它應該拋出一個異常。
至於你是否應該抓住它並重新拋出它,答案是肯定的,但只有當你需要在設置器中立即處理異常之前,將它傳遞到堆棧之前......但記錄它不是做這件事的理由。一般來說,你應該在更高的層次上執行跨層次的異常日誌記錄,在異常不會被重新拋出的情況下......如果你正在關注堆棧中某些地方的交叉問題, ,絕對不要重新拋出同樣的異常。但是,如果您正在編寫一個工具或框架庫,您希望組件的客戶端擁有一組清晰定義的期望異常,並且您已定義了您的組件將向客戶端代碼拋出的自定義異常,以及哪些客戶端組件期望看到,那麼您可能希望捕獲CLR生成的異常並重新引發您自己的自定義異常。始終在將自定義異常「InnerException」屬性傳遞到堆棧之前包含實際底層異常,所以其中的數據可用於任何最終消耗它的系統。
捕捉和重新拋出是最糟糕的事情。如果你只是想重新推出一下這個觀點,那麼它對TRY來說代價高昂?例如,如果您需要記錄它們,您可以使用catch unhandled exceptions with the global.asax。
在驗證方面,從網絡角度來看,我總是使用正則表達式驗證日期,這些火災的客戶端和服務器端,所以我知道什麼時候
if(Page.IsValid)
塊內部的IM,我txtDate.Text是一個有效的日期,所以我不打擾檢查,因爲它只是浪費。
這取決於具體的任務。如果你正在編寫一個庫類作爲其他程序中的一個組件,並且該類的方法的契約說它只應該接受有效日期,那麼拋出異常就沒有問題。
如果您接受用戶輸入,然後等待異常是一種不好的做法。在這種情況下,你應該自己驗證日期。
例外情況適用於特殊情況,不應該成爲您邏輯的一部分。這通常意味着合同被程序員破壞了。
它真的取決於您的應用程序的邏輯。只有在出現異常的情況下才會拋出異常。對於驗證這樣的事情,取決於對無效數據的容忍度。
當您構建交互式應用程序並且用戶可能輸入任何內容時,文檔進入無效狀態可能是確定的,您應該通過文檔類上的屬性公開驗證信息。
如果您正在處理來自數據庫或日誌文件的預先準備好的文檔,那麼文檔無效並繼續操作可能會破壞系統中的數據可能不正確。當發生這種情況時,你應該拋出
我認爲這取決於日期值的來源。如果它來自用戶輸入或其他可以輸入「無效」日期的其他來源,那麼驗證就是要走的路。另一方面,如果沒有可預見的理由爲什麼數據值可能無效,則拋出異常是適當的。
- 1. 驗證異常Silverlight驗證
- 2. IDataErrorInfo vs驗證規則與異常
- 3. 驗證異常與IDataErrorInfo和新的INotifyDataErrorInfo
- 4. 設計before_action:驗證異常
- 5. 驗證拋出異常
- 6. Hibernate驗證程序異常
- 7. 驗證Nunit中的異常
- 8. PyXero庫驗證異常
- 9. 異常(驗證)處理
- 10. 驗證字符串異常
- 11. 澤西島驗證異常
- 12. reCaptcha驗證超時異常
- 13. 註釋驗證異常(com.ibm.wsspi.amm.validate.ValidationException)
- 14. angular2異步驗證this.subscribe異常?
- 15. 將JSR303 JavaBean驗證異常轉換爲自定義異常
- 16. 服務驗證:如果驗證失敗,則拋出異常
- 17. Silverlight驗證在修復驗證錯誤後拋出異常
- 18. ASP.NET請求驗證異常即使驗證被禁用
- 19. Django CSRF驗證CSRF驗證失敗。請求異常終止
- 20. Paramiko身份驗證驗證(原來是Python異常處理)
- 21. 驗證豆,我開始使用Bean驗證異常消息
- 22. 起訂量拋出異常的驗證
- 23. 使用異常驗證輸入
- 24. 播放框架scala json驗證異常
- 25. 異常:0x800A03EC添加數據驗證時
- 26. Grails的唯一驗證異常節省
- 27. 驗證碼中的空指針異常
- 28. 關於c#中的驗證異常#
- 29. 數據驗證拋出異常
- 30. Spring安全性驗證異常處理