1

他のユーザーが使用できるように、API ではなくビジネス アプリケーションを構築しています。この場合、if/then/throw モデルで検証ロジックを使用することを好みます。Code Contracts を使用する方がよいとのことでした。メリットが見当たりません。目に見えない明らかなメリットはありますか? コード コントラクトは静的メソッド呼び出しであり、コンパイル フェーズ後にコード インジェクションが発生するため、コード コントラクトを使用すると問題が発生します。ありがとう

4

1 に答える 1

5

明らかな利点が 2 つあります。

(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 に答える