我已经看到它在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