これまでのところ、多くの良いフィードバックがあります。
ルール#1。実際に処理する例外のみをキャッチします。ハンドルとは、クライアントの要求が継続できるように処理することを意味します。情報をログに記録するのに十分な時間 (これを悪用しないでください。通常はスタックで十分な情報です)、またはより簡単に伝播する別のエラー (ala ランタイムベース) に変換するのに十分な長さで物事をキャッチできます。しかし、それを処理できない場合は、わざわざ捕まえないでください。それは役に立たず混乱を招く余分なコードです。ログを取ったり変換したりしても、結局は再スローされます。
ほとんどの場合、例外を処理できないことに注意してください。本当に。多くの人はこれを理解できていません。しかし現実には、ディスクの読み取りまたは書き込み中に IOException が発生すると、ゲーム オーバーになります。ユーザーのその要求を完了することはできません。ネットワークが不安定でデータベースと通信できない場合も同様です。
ルール#2。処理できない例外が発生した場合にできる唯一のことは、ユーザーにとって役立つような方法で失敗を試みることです。これは、後で分析するためにログに記録し (元のスタック/原因を含む)、ユーザーにできるだけ役立つものを報告することを意味します。システムが一貫した状態に保たれるように、必要なものはすべてクリーンアップします。
このエンド ユーザーとのコミュニケーションは非常に高いレベルで行われるため、通常はそのレベルでキャッチする必要があります。ほとんどの場合、例外処理の開始点と、ログ記録およびユーザーへのレポートのために例外をキャッチする最上位レベルの間の例外処理には、ほとんど価値がないことがわかります。私はしばしば RuntimeException の形式に変換しますが、これは層を介した伝播を容易にするためにのみ行われます。
最大かつ最も重要なことは、通常は例外を処理できないことを認識することです。そのため、それらのために記述するコードはできるだけ単純にする必要があります。