您如何看待托管合同工具库

时间:2009-01-26 14:37:43

标签: c#-4.0 design-by-contract spec#

我最近看过这个视频 关于托管合同工具库的http://channel9.msdn.com/pdc2008/TL51/当然看起来非常有趣。可悲的是,似乎他们不会将这种情况包含在语言本身中,这本身就像Spec#中那样更优雅。将C#4.0作为两个选项实际上是很好的,因为合同会给业务代码增加很多噪音。

有人在这里使用它并有一些现实世界的反馈吗?你还可以将合同添加到类属性甚至变量吗?像

这样的东西
decimal Percentage (min 0, max 1)
string NotNullString (not null, regex("??"))

可能会很好。

2 个答案:

答案 0 :(得分:2)

我正在尝试,但我认为该库太年轻,无法在大型项目中使用,至少在启用静态检查时:编译速度非常慢,并且具体的警告不是很清楚。

运行时检查可以毫无问题地使用,因为它们似乎是作为Debug.Assert实现的。至少你记录方法。

为了向属性添加契约,我会向set属性添加约束,但在这种特定情况下,我认为编写一个可以实际封装需求的类会更好,只允许构造好的对象。无论如何:

    private decimal _Percentage;
    decimal Percentage
    {
        get{ return _Percentage;}
        set
        {
            CodeContract.RequiresAlways(value <= 1);
            CodeContract.RequiresAlways(value >= 0);
            _Percentage = value;
        }
    }

p.s:在我看来,C#的趋势是在动态打字方向,而不是采用严格和强大的打字编码方法。我认为DbC在强类型方面效果更好,至少因为它可以为类型和函数添加更多要求。

答案 1 :(得分:0)

似乎合同库可能非常适合Linq2Sql。在sql数据库中定义字段和约束,可以为您生成合同。这可能是对合同的一个很好的介绍。