2

すべての関数を try と catch でラップすることは良い習慣ですか?

サーバーをより堅牢にし、クラッシュから保護する方法の 1 つは、サーバー内のすべての関数を try&catch ステートメントでラップすることであるかどうかを理解しようとしています。

これは合理的なことですか??

4

3 に答える 3

8

これは、すべての関数をtryとcatchでラップするための良い習慣ですか?

絶対違う。これは災害のレシピです。つまり、問題が発生して状態が破損している場合でも、リクエストを続行しようとする可能性があります。

通常、実際に例外を処理して正常に続行できるキャッチブロックのみが必要です。それ以外の場合は、例外をバブルアップさせる必要があります。したがってcatch、特定の操作のみを再試行するためにブロックが必要になる場合があります。

次にcatch、サーバー自体がクラッシュするのを防ぐために、最上位にブロックを配置できます。構築しているサーバーの種類を教えてくれませんでした。フレームワーク自体がcatchこのような適切なブロックを提供する可能性があります。

例外をキャッチするもう1つの理由は、例外をラップして、より適切なものとして再スローし、実装の詳細を非表示にし、場合によってはコンテキストを追加することです。ただし、これは率直に言って少し苦痛になる可能性があり、特定の状況でのみ役立ちます。それは実際には、どのコードが例外をスローしているのか、そしてそれをどのように処理するのかによって異なります。

于 2012-03-03T14:13:46.110 に答える
1

2つの具体的かつ重要な注意事項:

  1. 偽装-常にtry/catch / finallyブロックを使用する:偽装を使用している場合は、常にコードをtry / catch / finallyブロックでラップし、ログアウトコードをfinallyブロックに配置する必要があります。その理由は、なりすまし中に例外がスローされ、例外が「バブルアップ」した場合でも、なりすましIDとしてログインするため、セキュリティ上のリスクがあります。

  2. ループ-try/catchブロックは使用しないでください:try/catchブロックは高価です。アプリケーションが、例外が一番上までバブルするはずの障害にぶつかった場合、それは問題ありませんが、ループ内でtry / catchを使用して、次の項目に反復することは絶対にしないでください。例として、計算を実行するループがあり、データが不良の場合は0による除算エラーが発生します。計算を実行してから例外をキャッチしてループを続行するのではなく、0を確認してループを続行するだけで、例外がスローされることはありません。

于 2012-03-03T15:12:49.103 に答える
0

関数のグループをtryでラップし、さまざまな例外をキャッチして処理する方がよいと思います。同じ機能を備えた、より読みやすく小さなコードを提供します

于 2012-03-03T14:11:57.650 に答える