1

私は最近、このビデオ http://channel9.msdn.com/pdc2008/TL51/で管理されたコントラクト ツール ライブラリについて見ましたが、これは確かに非常に興味深いものです。悲しいことに、Spec# のようにより洗練された言語自体にこれを含めないようです。実際、Contracts はビジネス コードに多くのノイズを追加するため、C#4.0 では両方のオプションがあると便利です。

ここで誰かがそれを使用して、実際のフィードバックを持っていますか? クラスのプロパティや変数にもコントラクトを追加できますか? 何かのようなもの

decimal Percentage (min 0, max 1)
string NotNullString (not null, regex("??"))

よかったかも。

4

2 に答える 2

2

私はそれを試していますが、少なくとも静的チェックが有効になっている場合、ライブラリは若すぎて大きなプロジェクトで真剣に使用できないと思います。コンパイルが非常に遅く、特定の警告を読むのがあまり明確ではありません。

ランタイムチェックは、Debug.Assertとして実装されているように見えるため、問題なく使用できます。少なくともメソッドを文書化します。

プロパティにコントラクトを追加するには、setプロパティに制約を追加しますが、この特定のケースでは、要件を実際にカプセル化して、適切なオブジェクトのみを構築できるクラスを作成する方がよいと思います。ともかく:

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

ps:C#の傾向は、厳密で強力な型付けコーディング方法ではなく、動的型付けの方向に向かっているように思われます。DbCは、少なくとも型と関数に要件を追加できるため、強い型付けの方がうまく機能すると思います。

于 2009-01-30T15:15:25.693 に答える
0

It seems the Contract Library could be a nice fit for Linq2Sql. Define fields and constraint in your sql database and contracts could be generated for you. This could be a nice introduction to Contracts.

于 2009-01-30T18:20:59.767 に答える