1. ホーム
  2. validation

データ検証時にExceptionを投げるのは良いことなのか悪いことなのか?

2023-08-30 10:20:49

質問

データを検証する際、以下のようにするのが癖になっています。

注意してください。 本当は各チェックに個別のブーリアンがあるわけではありません。これはあくまで例としてです。

もう一つの注意点。 テスト中のいかなるエラー処理も適切に行われています。try-catchで投げられる唯一の例外は私自身のものです。

try {
  if (validCheckOne = false) {
    throw new Exception("Check one is bad");
  }
  if (validCheckTwo = false) {
    throw new Exception("Failed because of check2");
  }
  if(validCheckTen = false) {
    throw new Exception("Yet another failure on your part: check10.");
  }
} catch(Exception e) {
  MessageBox.Show("Your stupid data is wrong! See for yourself: " + e.Message);
}

これは悪い習慣ですか?例外を投げることは、プログラムの実行を遅くしたり、望ましくないことなのでしょうか?

どのように解決するのですか?

個人的には、ビジネスルールの検証で例外を投げるのが好きです(ユーザー入力の検証ではそうでもないですが)。私のビジネス オブジェクトが何らかの検証結果を返した場合、呼び出し元はそれを無視することができます。お望みなら、私をカウボーイと呼んでください :)

ここでは誰もが「例外は例外的な状況のためにある」というフレーズを繰り返していますが、例外的でない状況で例外を使用することがなぜ悪いのかについては、まったく理解していません。それ以上のことが必要なのです。例外を投げることによるパフォーマンスへの打撃は、本当に悪いのでしょうか?利用可能なベンチマークはあるのでしょうか?