4
我为什么要使用代码合同
最近,我偶然发现了Microsoft的代码合同框架。 我阅读了一些文档,发现自己不断问:“为什么我要这样做,因为它通常也不执行静态分析。” 现在,我已经有了一种防御性编程风格,并带有如下防护异常: if(var == null) { throw new NullArgumentException(); } 我也大量使用NullObject Pattern,很少遇到任何问题。向其添加单元测试,就一切就绪。 我从未使用过断言,也从未错过它们。恰恰相反。我真的很讨厌其中包含很多毫无意义的断言的代码,这对我来说只是噪音,使我无法真正看到。代码合同,至少是Microsoft的方法,几乎是一样的,甚至更糟。它们给代码增加了很多噪音和复杂性。在99%的情况下,无论如何都会抛出异常-所以我不在乎它是来自断言/合同还是实际问题。程序状态真正被破坏的情况极少出现。 坦率地说,使用代码契约有什么好处?有没有?如果您已经在使用单元测试和防御性代码,我认为引入合同是不值得的,并且会给维护人员在更新方法时要诅咒的代码带来噪音,就像我看不到代码在做什么一样由于无用的断言。我还没有看到支付该价格的充分理由。