Microsoft Code Contracts是否不适合验证用户输入?

时间:2010-09-01 19:38:12

标签: validation code-contracts application-blocks

我已经看到它写在其他地方,虽然企业库验证应用程序块旨在验证用户输入,但代码约定是为了防止程序员错误。你会支持这个意见吗?为什么呢?

3 个答案:

答案 0 :(得分:6)

是。

代码合同旨在保持严格的编程接口,只有开发人员才能正确或错误;用户不应该真的搞砸了。

验证旨在验证数据;例如验证数据不为空,或与正则表达式匹配。

答案 1 :(得分:2)

代码合同在违反时抛出异常。无效的用户输入不是异常情况,因此验证函数通常不应抛出异常。这就是为什么像TryParse这样的方法被添加到框架中的原因(原始框架没有它们,并且由于所有可能的例外,它使验证变得麻烦)。

答案 2 :(得分:0)

代码契约用于断言始终为真的事物,如果它们不成立,则代码中存在错误。这意味着它只能应用于由代码控制的条件。因此,您不能使用它们来声明“用户永远不会提供空字符串”,因为这不受代码控制。静态验证器永远无法证明该声明 - 它如何知道用户将做什么?

你可以做的是make语句,如“给定用户输入,该方法将返回非空字符串或抛出异常”。