web-dev-qa-db-ja.com

例外処理のベストプラクティスの信頼できるソース

私の職場は、コードベース全体に次のような構成要素が飛び散っているポケモン例外処理アンチパターンの悪いケースに悩まされています。

try {
    ...
} catch (Exception ex) {
    // Log and pretend nothing happened.
    Log.LogException(ex);        
}

Stack Exchangeのサイトで、上記が悪い理由を説明する多くの回答を見つけました。しかし、上記のようなコードを書くべきではない理由を説明している本、開発者ジャーナル記事、msdnページなどのauthoritativeソースは見つかりませんでした。そのような情報源はありますか?

編集:「有名な」ブロガーも信頼できる情報源として数えると思います。権威あるものとみなされるものについての私のルールは、厳密に定められたものではありません。

5

C#では、 Framework Design Guidelines よりも信頼できるソースを要求することはできません。これは、.NETに付属するコアライブラリを設計するときに.NETベースクラスライブラリの作成者が従ったものです。 例外を処理する方法に関する包括的なガイドライン が含まれています。

特定 では、それは言う:

[〜#〜] avoid [〜#〜]System.ExceptionSystem.SystemExceptionなどの非特定の例外をキャッチしてエラーを飲み込むなど、アプリケーションコードで。

12
munificent

ジョン・スキートとエリック・リペルト。 .NETの世界で、より優れた頭脳を持つ人を見つけてください。 :)

私はここから始めます: エリック・リッパートによる厄介な例外

次に、例外のいずれかに関連するものを探します。また、Clean Codeブックのコメントに+1します。 クリーンコード by Robert Martin :)

5
Alex Dresko

これは、マイクロソフトのプリンシパルアーキテクトであるKrzysztof Cwalinaの記事です。それは6年前に書かれましたが、それでも、さまざまな例外の種類について何をすべきかを自分に思い出させるための私の頼りになるものです。

例外階層を設計する方法

例外を3つのタイプに分類します。

  • NullReferenceExceptionなどの使用エラーは、コードを修正することで修正されました。
  • FileNotFoundExceptionなど、技術的に回避できない論理エラー。 (File.Existsを使用した場合でも、チェックしてからファイルを使用するまでの間に誰かがファイルを削除する可能性があります。)これらを処理する必要があります。
  • OutOfMemoryExceptionなどのシステム障害で、で処理できない

記事にはたくさんの良い情報があります。

1
Kyralessa