我们正在努力制定一项政策,以正确处理应用程序中的异常。以下是我们的目标(摘要):
- 仅处理特定的异常。
- 仅处理您可以纠正的异常
- 仅记录一次。
我们提出了一个解决方案,涉及一个通用的应用程序特定异常,并在代码片段中按如下方式工作:
try {
// Do whatever
}
catch(ArgumentNullException ane)
{
// Handle, optinally log and continue
}
catch(AppSpecificException)
{
// Rethrow, don't log, don't do anything else
throw;
}
catch(Exception e)
{
// Log, encapsulate (so that it won't be logged again) and throw
Logger.Log("Really bad thing", e.Message, e);
throw new AppSpecificException(e)
}
所有异常都被记录并转换为AppSpecificException,以便不会再次记录。最终它将到达最后的事件处理程序,如果必须处理它。
我没有太多关于异常处理模式的经验...这是解决我们目标的好方法吗?它有什么主要缺点或大红色警告吗?
注意:其中一个缺点是在第一次捕获后,您失去了处理特定异常的能力(如果您调用调用另一个方法的方法并且第二个方法抛出异常,则无法处理它),但我发现我从未这样做过...我只处理一级深度的异常...