编写代码契约而不是直接检查逻辑代码有什么好处吗?

本文关键字:代码 什么 契约 检查 | 更新日期: 2023-09-27 18:13:32

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

编写代码契约而不是直接检查逻辑代码有什么好处吗?

有两个明显的好处:

(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文档文件中生成代码契约的文档。

(4)可以用Contract.Ensures()表示后置条件约束。这允许您避免像if (item.Property1 != null && item.Property1.Property2 != null) ...这样的代码,因为您将知道PropertyProperty2都不能为空。

(5)代码契约形成一个块,与其他代码明显分开。