以下は、私が持っているセットアップの簡単な例です。私の問題は、例外が低レベルでスローされ、その後バブルアップすることです。しかし、より高いレベルのクラスは、より低いレベルのクラスの機能を使用するときにどんな恐怖が待ち受けているかを知りません。これにより、開発者は、恐ろしい「MyCustomException」の例外処理なしで Class3.DoWork3() を使用できるようになります。
私はこれにすべて間違って近づいていますか?同じ例外を複数回キャッチしてスローしたくありません (たとえば、Class2 でクリーンアップを行う必要はありません)。
public class Class1
{
<exception cref="MyCustomException">description</exception>
public void DoWork1()
{
throw new MyCustomException("I have failed you class1.");
}
}
public class Class2
{
public void DoWork2()
{
var classOne = new Class1();
// Here I can see that DoWork1() will throw a 'MyCustomException'
classOne.DoWork1();
}
}
public class Class3
{
public void DoWork3()
{
var classTwo = new Class2();
// I can no longer see that Class2.DoWork2() will throw a 'MyCustomException'
classTwo.DoWork2();
}
}
コメントで発生したと思われる混乱を解消するために、現在検討している 2 つの解決策を示します。
- Class1 と同じ MyCustomException コメントで DoWork2 にタグを付けます。
- DoWork2 内で別の例外をスローし、この新しい例外でタグ付けします。このオプションは、より詳細なログ (たとえば、コードが実行パスのどこで失敗したか) を許可するため、最も堅牢に見えます。この方法は、単純化されたシナリオでは少しやり過ぎに思えます。そのため、(1) がこの問題に対する許容可能な解決策であるかどうか疑問に思っています。