一般的な経験則では、実際に何かできる場合にのみ例外をキャッチします。したがって、ビジネスまたはデータ層では、次のような状況でのみ例外をキャッチします。
try
{
this.Persist(trans);
}
catch(Exception ex)
{
trans.Rollback();
throw ex;
}
私のビジネス/データ層はデータを保存しようとします - 例外が生成された場合、すべてのトランザクションがロールバックされ、例外が UI 層に送信されます。
UI レイヤーでは、共通の例外ハンドラーを実装できます。
Application.ThreadException += new ThreadExceptionEventHandler(Application_ThreadException);
次に、すべての例外を処理します。例外をログに記録し、ユーザーフレンドリーな応答を表示する場合があります。
static void Application_ThreadException(object sender, ThreadExceptionEventArgs e)
{
LogException(e.Exception);
}
static void LogException(Exception ex)
{
YYYExceptionHandling.HandleException(ex,
YYYExceptionHandling.ExceptionPolicyType.YYY_Policy,
YYYExceptionHandling.ExceptionPriority.Medium,
"An error has occurred, please contact Administrator");
}
実際の UI コードでは、別のわかりやすいメッセージを表示したり、画面を変更したりするなど、別のことを行う場合に、個々の例外をキャッチできます。
また、例外をスローするのではなく、常にエラーを処理するようにしてください。たとえば、0 で除算します。