我们正在努力使用策略来正确处理应用程序中的异常.这是我们的目标(总结):
我们已经提出了一个涉及通用特定于应用程序特定异常的解决方案,并且在一段代码中就是这样的:
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)
}
Run Code Online (Sandbox Code Playgroud)
记录所有异常,然后转为AppSpecificException,以便不再记录它.最终它将到达最后的手段事件处理程序,如果必须,将处理它.
我对异常处理模式没有太多经验......这是解决我们目标的好方法吗?它有任何重大缺点或大红色警告吗?
注意:这样做的一个缺点是,在第一次捕获之后你将失去处理特定异常的能力(如果你调用一个调用另一个方法的方法而第二个抛出异常则你无法处理它)但是我发现我从来没有这样做过......我只处理一个深度的例外...