代码之家  ›  专栏  ›  技术社区  ›  punkouter

.net 4.0代码契约。何时使用?他们什么时候浪费时间?

  •  9
  • punkouter  · 技术社区  · 15 年前

    我一直在研究.NET4.0代码契约,并研究stackoverflow以及与此相关的问题。

    我还从来没有遇到过任何使用代码契约的示例代码,所以我想知道。。这真的有用吗?或者它可能是唯一有用的一个你的代码达到一定的复杂性?有人在使用代码契约并且真的很高兴他们这么做了吗?

    在我看来,所有的代码契约都是一个关于方法的输入和输出的断言,并且能够尝试在编译时计算出输入和输出的值。。。但是这将需要在所有方法上使用更多的代码。。值得吗?

    我注意到的一个好处是,在我看来,您可以使用代码契约作为单元测试的第一行。。。然后,当您编写单元测试时,可以避免编写一些更基本的测试,因为代码契约已经涵盖了它。。是真的吗?

    合同是否适用于WCF呼叫?我猜不是因为代理是自动创建的,你不能改变。

    3 回复  |  直到 15 年前
        1
  •  7
  •   kemiller2002    15 年前

    每当我需要验证输入参数是否需要有一个特定的值(数字是正的,对象不是空的)时,我都会使用它们。

    对于输出,只要我确定返回值应该处于某个状态(例如不为null),我就使用它们。

    在代码中使用契约可以确保在意外值突然出现时抛出异常,而不会在代码中进一步引发异常,因为意外假设可能会导致对象意外地处于损坏状态。

    就我个人而言,我认为它使代码更干净。这个符号使得写起来要少得多(而不是使用if(..==null)…)。这边也是 Contract.Requires

        2
  •  2
  •   Andrey    15 年前

    合同研究领域有: http://en.wikipedia.org/wiki/Design_by_contract

    代码契约有助于回答以下问题:

    • 方法期望什么?
    • 方法维护什么?

    如果你能为这些问题写一份小而可读的合同,那么就用它吧。

        3
  •  2
  •   Dave Black    13 年前

    一个

    如果需要,可以禁用CodeContracts的运行时强制。

    http://research.microsoft.com/en-us/projects/contracts/userdoc.pdf