これまでのフィードバックがたくさんありましたが、私はあなたにそれを渡します。
ルール#1。あなたが実際に処理しようとしている例外をキャッチするだけです。ハンドルとは、クライアントの要求を継続できるように処理することです。情報をログに記録するのに十分な時間を捉えることができます(乱用しないでください。通常、スタックは十分な情報です)。あるいは、より簡単に伝播する別のエラー(ランタイムベース)に変換してください。しかし、あなたがそれを処理することができない場合は、それをキャッチする気にしないでください。それは無用で混乱する余分なコードです。あなたが記録したり変換したりしても、あなたは再暴行を終わらせます。
ほとんどの場合、例外を処理することはできません。本当に。多くはこれを把握していません。しかし、実際には、IOExceptionをディスクに読み書きすると、ゲームが終了します。その要求はユーザーに対して完了できません。あなたのネットワークが不安定で、データベースと話すことができない場合は、同じことをしてください。
ルール#2。あなたが処理することができない例外を取得する場合、あなたが行うことができる唯一のことは、それがユーザに役立つような方法で失敗しようとすることです。これは、後の分析(元のスタック/原因を含む)のためにログに記録し、できるだけ有用なものをユーザーに報告することを意味します。システムを一貫した状態に保つために、必要なものを掃除してください。
エンドユーザーとのこの通信が非常に高いレベルで行われることを考えれば、通常、そのレベルでキャッチする必要があります。たいていの場合、私は、それが開始点であることと、ユーザーに記録して報告するためにキャッチしたトップレベルとの間の例外処理にはほとんど価値がないことがわかります。私はしばしばRuntimeExceptionの形式に変換しますが、これは層を介した伝播を容易にするためだけです。
最大の最も重要なことは、通常は例外を処理できないことを認識することです。そのために作成するコードはできるだけシンプルにする必要があります。
ストリームからドキュメントを逆シリアル化しようとしているときに例外が発生したとします。部分的に構築されたドキュメントを放棄し、そのファイルがロードできなかったことをユーザに通知すると、その例外を「処理しましたか」? – supercat
@supercat - はい。あなたが合理的にできる限り。間違ったことのような良いエラーメッセージを提供することができます。しかし、ドキュメントが逆シリアル化に失敗した場合、さらに何をすることができますか? – rfeak
破棄されたドキュメント以外の状態を破損しない例外と、破損したシステム状態を示す例外との違いを、どのように伝えるべきですか? – supercat