编写代码契约而不是直接检查逻辑代码有什么好处吗?
本文关键字:代码 什么 契约 检查 | 更新日期: 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) ...
这样的代码,因为您将知道Property
或Property2
都不能为空。
(5)代码契约形成一个块,与其他代码明显分开。