9

私は.NET4.0コードコントラクトを研究していて、これに関する質問でスタックオーバーフローも調べています。

コードコントラクトを使用するサンプルコードに出くわしたことがないので、疑問に思います。これは本当に便利ですか?それとも、コードが特定の複雑さに達する唯一の有用なものですか?コードコントラクトを使用している人がいて、本当に喜んでいますか?

すべてのコードコントラクトは、コンパイル時に出入りする値を把握することを試みることができることに加えて、メソッドに何が入り、何が出て行くかについてのアサーションであるように私には思えます...しかし、これは進んでいますすべてのメソッドでより多くのコードを必要とする..それは価値がありますか?

私が気付いた利点は、ユニットテストの最初の行としてコードコントラクトを使用できるように見えることです...次に、ユニットテストを作成するときに、コードコントラクトがすでにカバーしているため、より基本的なテストの作成を回避できます。 。 本当 ?

コントラクトはWCFコールで機能しますか?プロキシが自動的に作成されるので、変更できないと思います。

4

3 に答える 3

7

入力パラメーターが特定の値を持つ必要があることを検証する必要があるときはいつでもそれらを使用します(数値は正、オブジェクトはnullではありません)。

出力には、戻り値が特定の状態(たとえば、nullではない)であることが確実な場合はいつでもそれらを使用します。

コードにコントラクトがあると、予期しない値が発生した瞬間に例外がスローされ、誤った仮定のためにオブジェクトが誤って破損した状態のままになる可能性があるコードのさらに下にスローされることはありません。

個人的には、コードがかなりきれいになると思います。この表記により、(if(.... == null)....を使用する代わりに)書き込みが大幅に少なくなります。この方法もContract.Requires、それが達成しようとしていることにおいて非常に前向きです。コードがパラメーターが特定の状態にあることを評価していることがわかったとき。

于 2010-06-24T15:19:47.383 に答える
2

契約に関する研究分野があります: http://en.wikipedia.org/wiki/Design_by_contract .net に導入されるずっと前のことです。

コード コントラクトは、次の質問に答えるのに役立ちます。

  • メソッドは何を期待していますか?
  • メソッドは何を保証しますか?
  • メソッドは何を維持しますか?

それらの質問に対して小さくて読みやすい契約を書くことができる場合は、それを使用してください。

于 2010-06-24T15:23:16.440 に答える
2

CodeContracts を使用する主な理由の1 つは、静的分析が CodeContracts の違反を検出できるようにして、実行時にバグや不明な動作が発生するのではなく、早期に発見できるようにすることです。

必要に応じて、CodeContracts の実行時の強制を無効にすることができます。

それらを使用するもう 1 つの正当な理由は、コントラクト定義を XML コード コメントに追加して、API ドキュメントを強化することです。これは Sandcastle でも機能しますが、それらを完全に統合するには微調整が必​​要です。http://research.microsoft.com/en-us/projects/contracts/userdoc.pdfで入手可能な 2011 年 2 月 4 日 (またはそれ以降) の Code Contracts User Manual のセクション 8.3 を参照してください。

于 2011-10-13T17:41:07.937 に答える