我已經看到它在SO上的其他地方寫過,儘管企業庫驗證應用程序塊旨在驗證用戶輸入,但代碼合同是爲了防止程序員錯誤。你會支持這個觀點嗎?爲什麼?微軟代碼合同是否不適合驗證用戶輸入?
4
A
回答
6
是的。
代碼合同是爲了保持一個嚴格的編程接口,只有開發人員才能正確或錯誤;一個用戶不應該真的能夠搞砸了。
驗證是爲了驗證數據;例如驗證數據不爲空,或匹配正則表達式。
+1
是的,合同失敗意味着你在代碼中有一個嚴重的錯誤,不應該被忽略/解決(這是默認情況下它不會引發可捕獲異常的原因的一部分)。 – porges 2010-09-01 21:02:17
2
代碼合同違反時會拋出異常。無效的用戶輸入不是一個例外情況,所以驗證函數通常不應該拋出異常。這就是爲什麼像TryParse
這樣的方法被添加到框架中的原因(原始框架沒有它們,並且由於所有可能的例外而導致驗證繁瑣)。
0
代碼契約被用來斷言永遠是真實的東西,如果它們不是真的,那麼代碼中就有一個錯誤。這意味着它只能應用於由代碼控制的條件。所以,你不能用它們來陳述「用戶永遠不會提供一個空字符串」,因爲這不在代碼的控制之中。靜態驗證者將永遠無法證明這一陳述 - 它如何知道用戶會做什麼?
你能做的就是做出像「給定用戶輸入,該方法將返回一個非空字符串或拋出異常」的語句。
相關問題
- 1. 檢查用戶輸入是否適合
- 2. 應該驗證不同的代碼塊是否合併?
- 3. 代碼簽名(微軟驗證碼)
- 4. 用戶驗證的合適方法
- 5. 使用微軟代碼合同免費聲明代碼副作用
- 6. 您的代碼是否適合雙擊?
- 7. 此代碼是否適合ActionFilter?
- 8. 代碼合同是否用於安全?
- 9. 如何檢查用戶輸入是否適合變量?
- 10. JavaScript表單驗證工作不適合2個輸入字段
- 11. WPF是否適合Line of Business軟件?
- 12. 如何將輸入驗證合併到此代碼中?
- 13. datatables jeditable驗證輸入url如何結合這段代碼?
- 14. 驗證對NuGet包的引用是否合適NuGet引用
- 15. 如何驗證F#代碼是否符合CLS
- 16. 是否有JavaScript的代碼合同庫?
- 17. 微軟同步框架身份驗證
- 18. 如何驗證用例是否適合我的設計?
- 19. jquery驗證不適用於此代碼
- 20. Python是否適合大型軟件項目(不是基於Web)?
- 21. 哪種方法更適合驗證輸入?
- 22. 是代理鏈是否合適
- 23. JQuery驗證插件submitHandler不適合我
- 24. 爲什麼struts驗證不適合我?
- 25. 是代碼合同AOP?
- 26. 代碼合同可以取代參數驗證嗎?
- 27. 使用代碼合同驗證參數屬性
- 28. 驗證應用程序塊和.NET 4.0代碼合同
- 29. 「告訴,不問」適用於用戶輸入驗證嗎?
- 30. 微軟語音驗證API
因爲用戶<>開發人員? – StuartLC 2010-09-01 19:40:12