例外をトラップし、例外の代わりにオブジェクトをクライアントに返す必要がある特定の状況があります。例外処理ロジックをより高いレベルに置くことはできません。つまり、Fooをtry句内にラップします。
いくつかのサンプルコードでデモンストレーションするのが最善です。例外処理ロジックはメソッドの意図を曇らせており、Fooクラスに同様の意図のメソッドが多数ある場合は、キャッチロジックのほとんどを繰り返していることに気付きます。
以下のコードで一般的な例外機能をラップするための最良の手法は何でしょうか?
public class Foo
{
public Bar SomeMethodThatCanThrowExcepetion()
{
try
{
return new Bar().Execute();
}
catch(BazException ex)
{
WriteLogMessage(ex, Bar.ErrorCode);
return new Bar() { ErrorMessage = ex.Message, ErrorCode = Bar.ErrorCode;}
}
}
public Baz SomeMethodThatCanThrowExcepetion(SomeObject stuff)
{
try
{
return new Baz(stuff).Execute();
}
catch(BazException ex)
{
WriteLogMessage(ex, Baz.ErrorCode);
return new Baz() { ErrorMessage = ex.Message, ErrorCode = Baz.ErrorCode;}
}
}
}