try/catch ブロックをどこにでも置かずに例外を処理するためのベスト プラクティスは何ですか?
例外の受信と処理に専念するクラスを作成するというアイデアがありましたが、それが良い設計アイデアかどうか疑問に思っています。そのようなクラスは例外を受け取り、そのタイプまたはエラー コードに応じてそれをどう処理するかを決定し、特定の情報についてスタック トレースを解析することさえできます。
背後にある基本的な考え方と実装は次のとおりです。
public class ExceptionHandler
{
public static void Handle(Exception e)
{
if (e.GetBaseException().GetType() == typeof(ArgumentException))
{
Console.WriteLine("You caught an ArgumentException.");
}
else
{
Console.WriteLine("You did not catch an exception.");
throw e; // re-throwing is the default behavior
}
}
}
public static class ExceptionThrower
{
public static void TriggerException(bool isTrigger)
{
if (isTrigger)
throw new ArgumentException("You threw an exception.");
else
Console.WriteLine("You did not throw an exception.");
}
}
class Program
{
static void Main(string[] args)
{
try
{
ExceptionThrower.TriggerException(true);
}
catch(Exception e)
{
ExceptionHandler.Handle(e);
}
Console.ReadLine();
}
}
これは興味深い試みだと思いました。理論的には、main() メソッド呼び出しの周りに 1 つまたはごく少数の try / catch ブロックしか必要なく、例外クラスが再スロー、処理、ロギングなどすべてを処理できるからです。
考え?