4

Enterprise Library Validation Application Block はユーザー入力の検証を目的としていますが、Code Contracts はプログラマーのエラーを防ぐためのものであると、SO の別の場所で書かれているのを見たことがあります。この意見を支持しますか?なんで?

4

3 に答える 3

6

はい。

コード コントラクトは厳密なプログラミング インターフェースを維持することを目的としています。ユーザーが実際にこれを台無しにすることはできません。

検証は、データを検証するためのものです。たとえば、データが null でないか、正規表現に一致することを確認します。

于 2010-09-01T19:43:42.650 に答える
2

コード コントラクトは、違反すると例外をスローします。無効なユーザー入力は例外的な状態ではないため、検証関数は通常、例外をスローしません。のようなメソッドTryParseがフレームワークに追加されたのはそのためです (元のフレームワークにはそれらがなく、考えられるすべての例外のために検証が面倒でした)。

于 2010-09-01T19:50:16.660 に答える
0

コード コントラクトは、常に true になるものをアサートするために使用されます。それらが true でない場合は、コードにバグがあります。つまり、コードによって制御される条件にのみ適用できます。したがって、「ユーザーが空の文字列を提供することは決してない」と述べるためにそれらを使用することはできません。これはコードの制御外であるためです。静的検証者はそのステートメントを証明することはできません.ユーザーが何をするかをどのように知ることができますか?

できることは、「ユーザー入力が与えられると、メソッドは空でない文字列を返すか、例外をスローする」のようなステートメントを作成することです。

于 2013-05-20T09:45:28.280 に答える