0

次のコードがあるとしましょう。

void validate(File f) //or boolean?????
{
  ...
  try
  {
    //try to validate xml file
  }
  catch (Exception e)
  {
  }
}

...

try
{

  validate(xml_file); //validates XML file
  move(xml_file, valid_folder); //moves valid XML file to valid_folder
}
catch (Exception e)
{
  move(xml_file, error_folder); //moves invalid XML file to error_folder
}

...

私のvalidate()関数は有効である必要がbooleanあり、ファイルが有効なXMLファイルであるかどうかを確認する必要がありますcatchingか?

4

4 に答える 4

3

プログラムの通常の流れを制御するために例外を使用しないでください。それらが発生すると、実行が大幅に遅くなります。プログラムで、有効な XML ファイルと無効な XML ファイルを並べ替えたいと考えています。したがって、無効な XML ファイルが発生することが予想されます。そのため、それらを別のファイルに分類しています。したがって、例外をスローするのではなく、ブール値を返す必要があります。

于 2012-12-16T14:29:30.823 に答える
2

考えたい問題の 1 つは、単一責任の原則です。つまり、メソッドは 1 つのことをうまく行う必要があります。

あなたの検証メソッドは、少なくとも 3 つのことを行っています。

  1. ファイルからの XML の読み取り
  2. 不特定の方法でその XML を検証する
  3. 結果に応じて、ファイルをあるフォルダーまたは別のフォルダーに移動する

これらを分解した方が楽かもしれません。

ファイルを移動せずに XML を検証したい場合はどうすればよいでしょうか。その場合、メソッドを呼び出すことはできません。

検証さえ疑わしい。スキーマに対してチェックすると、最初の問題で例外がスローされます。ユーザーはすべての問題を一度に知りたいと思うでしょうか? はいの場合は、ツリーをたどってすべてのエラーを自分で見つける必要があります。

于 2012-12-16T14:29:15.443 に答える
1

が返された場合はboolean、よりクリーンでシンプルに見えます。

if(validate(xml_file)) move(xml_file, valid_folder);
else move(xml_file, error_folder);

ただし、(例外をスローする) ソリューションには、メソッドに渡すことができる、スローされた例外に関する多くの情報が含まれている可能性がありますmove()。または、代わりに、各値が特定の状態を示すvalidate()メソッドが返されます。int

于 2012-12-16T14:29:22.967 に答える
1

ブール値として置くことができます。検証メソッドの開始時にブール変数 (最初は true) を追加でき、catch 内で false に設定できます。関数の最後で、ブール変数値を返します。したがって、try ブロック内のコードで例外が発生した場合は、boolean 変数を false に設定して処理し、例外が発生した場合はメソッドが false を返し、それ以外の場合は true を返します。

于 2012-12-16T16:28:21.223 に答える