1

我们正在构建业务应用程序而不是 API 供其他人使用,在这种情况下,我更喜欢在 if/then/throw 模型中使用我们的验证逻辑。有人告诉我,最好使用代码合同。我没有看到任何好处,是否有任何我没有看到的明显好处?我看到使用代码契约的问题,因为它是静态方法调用,并且在编译阶段之后发生了一些代码注入。谢谢

4

1 回答 1

5

有两个明显的好处:

(1) 代码更容易阅读。

 Contract.Requires(someParam != null && someParam.SomeValue != 0);

相对

if (someParam != null && someParam.SomeValue != 0)
    throw new ArgumentNullException("someParam", someParam, "someParam can't be null and someParam.SomeValue can't be zero.");

此外,使用代码契约,谓词代码会自动放入失败消息中,因此您无需像处理正常异常那样编写显式消息。

(2) 您可以对代码运行 Code Contracts 静态分析,它可以为您发现错误。

还有一些不太明显的好处:

(3) 您可以为 XML doc 文件中的代码契约生成文档。

(4) 可以用Contract.Ensures()后置条件来表达约束。这使您可以避免大量代码,if (item.Property1 != null && item.Property1.Property2 != null) ...因为您将知道两者都不为空,PropertyProperty2不能为空。

(5) 代码合约形成一个与代码的其余部分明显分开的块。

于 2013-05-15T08:33:55.613 回答