Enterprise Library Validation Application Block はユーザー入力の検証を目的としていますが、Code Contracts はプログラマーのエラーを防ぐためのものであると、SO の別の場所で書かれているのを見たことがあります。この意見を支持しますか?なんで?
3 に答える
はい。
コード コントラクトは厳密なプログラミング インターフェースを維持することを目的としています。ユーザーが実際にこれを台無しにすることはできません。
検証は、データを検証するためのものです。たとえば、データが null でないか、正規表現に一致することを確認します。
コード コントラクトは、違反すると例外をスローします。無効なユーザー入力は例外的な状態ではないため、検証関数は通常、例外をスローしません。のようなメソッドTryParse
がフレームワークに追加されたのはそのためです (元のフレームワークにはそれらがなく、考えられるすべての例外のために検証が面倒でした)。
コード コントラクトは、常に true になるものをアサートするために使用されます。それらが true でない場合は、コードにバグがあります。つまり、コードによって制御される条件にのみ適用できます。したがって、「ユーザーが空の文字列を提供することは決してない」と述べるためにそれらを使用することはできません。これはコードの制御外であるためです。静的検証者はそのステートメントを証明することはできません.ユーザーが何をするかをどのように知ることができますか?
できることは、「ユーザー入力が与えられると、メソッドは空でない文字列を返すか、例外をスローする」のようなステートメントを作成することです。