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