我们正在构建业务应用程序而不是 API 供其他人使用,在这种情况下,我更喜欢在 if/then/throw 模型中使用我们的验证逻辑。有人告诉我,最好使用代码合同。我没有看到任何好处,是否有任何我没有看到的明显好处?我看到使用代码契约的问题,因为它是静态方法调用,并且在编译阶段之后发生了一些代码注入。谢谢
问问题
465 次
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) ...
因为您将知道两者都不为空,Property
也Property2
不能为空。
(5) 代码合约形成一个与代码的其余部分明显分开的块。
于 2013-05-15T08:33:55.613 回答