質問

私はそれを認めます:私は例外処理をあまり気にしません。もっとやるべきことはわかっているのですが、どこから始めてどこで止めればいいのか全くわかりません。怠けているわけではありません。それとは程遠い。それは、私が例外処理の曖昧さに悩まされているということです。たとえ最小のアプリであっても、例外処理を適用できる場所は無限にあるように思え、やりすぎのように感じることもあります。

私は慎重なテスト、検証、そして静かな祈りでなんとかなりましたが、これは起こるのを待っている悪いプログラミング事故です。

では、例外処理のベスト プラクティスは何でしょうか?特に、例外処理を適用する必要がある最も明白/重要な場所はどこですか?また、例外処理を考慮する必要がある場所はどこですか?

曖昧な質問で申し訳ありませんが、これで本を一旦閉じたいと思います。

役に立ちましたか?

解決

マイクロソフトの パターン&プラクティスチーム 例外管理のベスト プラクティスをエンタープライズ ライブラリにうまく組み込んだ 例外処理アプリケーションブロック

Enterprise Library を使用しないイベントの場合、私は 非常に ドキュメントを読むことをお勧めします。P&P チームは、例外処理の一般的なシナリオとベスト プラクティスについて説明します。

始めるには、次の記事を読むことをお勧めします。

ASP.NET 固有の記事:

他のヒント

例外処理の黄金律は次のとおりです。

「扱い方を知っているものだけを捕まえる」

catch が例外を再スローするだけの tr​​y-catch ブロックをあまりにも多く見てきました。これでは何の価値も追加されません。例外をスローする可能性のあるメソッドを呼び出したからといって、呼び出し元のコードで発生する可能性のある例外に対処する必要があるわけではありません。多くの場合、例外を呼び出しスタック上で、何をすべきかを知っている他のコードに伝播させることは完全に許容されます。場合によっては、例外をユーザー インターフェイス層まで伝播させてから、メッセージをキャッチしてユーザーに表示することが有効です。状況に対処する方法を知るのに最適なコードはなく、ユーザーが行動方針を決定する必要がある場合があります。

まずは、すべての例外をキャッチし、ユーザーに対して少し不親切なメッセージを出力する優れたエラー ページを追加することから始めることをお勧めします。例外に関する入手可能なすべての詳細を必ず記録し、それを修正してください。これを行ったことをユーザーに知らせ、(おそらく) 機能するページへのリンクをユーザーに提供します。

次に、そのログを使用して、特別な例外処理を配置する必要がある場所を検出します。例外を処理する予定がない限り、例外をキャッチしても意味がないことに注意してください。上記のページを用意している場合、特定の時点で回復するための特別な方法がない限り、すべての DB 操作でデータベース例外を個別にキャッチしても意味がありません。

覚えて:例外をキャッチしないより悪い唯一のことは、例外をキャッチしても何もしないことです。これでは本当の問題が隠れてしまうだけです。

ASP.NET 固有というよりも、一般的な例外処理に関するものかもしれませんが、次のとおりです。

  • 可能な限り多くの情報を可能な限り記録できるように、可能な限り原因に近い例外をキャッチしてみてください。
  • プログラムへのエントリポイントに、何らかの形のキャッチオール、ラストリゾート例外ハンドラーを含めてください。ASP.NETでは、これはアプリケーションレベルのエラーハンドラーになる可能性があります。
  • 例外を「正しく」処理する方法がわからない場合は、例外を「予期しない」例外として扱うことができるキャッチオール ハンドラーにバブルアップさせます。
  • 辞書にアクセスするなど、.NETでtry *****メソッドを使用します。これは、ループと例外を複数投げた場合、主要なパフォーマンスの問題(例外処理は比較的遅い)を回避するのに役立ちます。
  • 例外処理を使用してプログラムの通常のロジックを制御しないでください。スローステートメントを介してループから終了します。

次のようなグローバル例外ハンドラーから始めます。 http://code.google.com/p/elmah/.

次に、問題は、どのような種類のアプリケーションを作成するのか、どのようなユーザー エクスペリエンスを提供する必要があるのか​​ということになります。ユーザー エクスペリエンスが充実するほど、より優れた例外処理を提供する必要があります。

例として、ディスク クォータ、ファイル サイズ制限、画像サイズ制限などがある写真ホスティング サイトを考えてみましょう。エラーごとに、単純に「エラーが発生しました。もう一度試してください。」または、詳細なエラー処理を開始することもできます。

  • 「ファイルが大きすぎます。最大ファイルサイズは5MBです。」
  • 「あなたのイメージは大きいことです。最大寸法は1200x1200です。」
  • 「あなたのアルバムはいっぱいです。最大ストレージ容量は1GBです。
  • 「アップロードにエラーがありました。我が家のハムスターたちは不幸です。また後で来てください。"

等等

例外処理に万能の方法はありません。

非常に基本的なレベルでは、Global.asax ファイル内の HttpApplication.Error イベントを処理する必要があります。これにより、発生した例外が 1 か所で記録されるため、例外のスタック トレースを確認できます。

この基本レベルとは別に、例外から回復できることがわかっている例外を処理するのが理想的です。たとえば、ファイルがロックされている可能性があると予想される場合は、IOException を処理してユーザーにエラーを報告するのが良いでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top