一部のデータを操作する関数のチェーンがある場合、各関数にデータを使用する前にデータが有効であることを確認させるか、チェーンの開始時にその検証を行い、チェーン内のすべての関数を単に「信頼」させる方が良いですか?それは有効ですか?
2 に答える
防御的プログラミングを適用することは常に良い習慣です。考えられるすべてのシナリオを検討する必要があります。
入力がユーザーからのものである場合、検証は非常に重要になります。その場合、無効なデータの各シナリオで何をすべきかをコードが認識していることを確認する必要があります。予測できる状況のアサーションと、予測できない状況の例外を試してみてください。詳細は、使用している言語によって異なります。これが防弾プログラムの基礎です。
チェーンの下位関数が単独で呼び出されるかどうかによって、決定が大きく左右されます。特定のクラスがプログラムの他のクラスによってのみ呼び出される厳密に階層化されたシステムがある場合、それらの内部クラスはデータ チェックを大幅に軽減し、データを「信頼」することができます。
Steve McConnell の「Code Complete 2」より:
「防御的プログラミングを目的としたバリケードの 1 つの方法は、特定のインターフェイスを「安全な」領域への境界として指定することです。安全な領域の境界を越えるデータの有効性を確認し、データが有効でない場合は賢明に対応してください。
同じアプローチをクラス レベルで使用できます。クラスのパブリック メソッドはデータが安全でないと想定します...データがクラスのパブリック メソッドによって受け入れられると、クラスのプライベート メソッドはデータが安全であると想定できます。」