【问题标题】:Are Microsoft Code Contracts unsuitable for validating user input?Microsoft 代码合同是否不适合验证用户输入?
【发布时间】:2010-09-01 19:38:12
【问题描述】:

我在 SO 的其他地方看到它写的,虽然企业库验证应用程序块用于验证用户输入,但代码合同旨在防止程序员错误。你会支持这个观点吗?为什么?

【问题讨论】:

  • 因为用户开发者?

标签: validation code-contracts application-blocks


【解决方案1】:

是的。

代码契约旨在保持严格的编程接口,只有开发人员才能判断对错;用户不应该真的能把它搞砸。

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

【讨论】:

  • 是的,合同失败意味着您的代码中有严重的错误,不应忽略/解决(这是默认情况下不抛出可捕获异常的部分原因)。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-23
      • 2014-01-24
      • 2014-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多