【发布时间】:2012-08-03 17:52:34
【问题描述】:
我有一种特殊情况,我需要捕获异常并将一个对象返回给客户端以代替异常。我不能将异常处理逻辑置于更高级别,即将 Foo 包装在 try 子句中。
最好用一些示例代码来演示。异常处理逻辑模糊了方法的意图,如果我有许多类似意图的方法,在 Foo 类中,我发现自己重复了大部分的 catch 逻辑。
在下面的代码中包装常见异常功能的最佳技术是什么?
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;}
}
}
}
【问题讨论】:
-
难道你不能把你的异常处理放到更高的层次,然后抛出一个异常链吗?
-
不幸的是,我不能。我在这里受到限制。
-
Bar和Baz之间是否有共同的基类? -
不幸的是没有,这是另一个限制,因为 Foo 是一个公共接口。
-
如果您无法将异常处理移至另一层,那么您的实现就会陷入困境。
标签: c# .net design-patterns exception-handling