【发布时间】:2013-11-27 18:59:27
【问题描述】:
最近,我一直在阅读如何正确处理异常以改进我的软件(避免捕获通用异常等),但我仍然有点困惑。这是我目前所做的(违反了一些好的做法,或者可能是全部)
ASP.NET Web 应用程序调用业务层,而后者又调用数据访问层。使用的日志框架是 log4net,只要记录了异常,它就会给我发电子邮件。
数据访问层捕获通用异常(是的,不好,因为我不知道网络是否可能是问题,或者存储过程的输入是否是错误类型等)将其记录为致命然后“扔;” (以保留堆栈跟踪)。
catch(Exception ex)
{
log.Fatal("Exception occurred while inserting task into database",ex);
throw;
}
*注意,我的数据访问层假设所有输入验证都在上层完成,但有时,我错过了检查一两个参数。
业务层也捕获“通用”异常(包括来自数据访问的异常),然后包装一个新异常,如
catch(Exception ex)
{
log.Fatal("Exception occurred while creating the task ", ex);
throw new exception("There appears to be an error while doing [name of business operations]", ex)
}
Web 应用层从业务层捕获任何异常并显示错误消息。
catch(Exception ex)
{
//show Ex.Message to the user on the current UI.
}
此外,还有将用户重定向到通用“联系管理员”错误页面的全局错误消息。
从我读过的所有内容来看,似乎我做错了。在这种情况下,使用上面的示例,我应该如何正确处理每个级别的异常?
- 数据访问
- 业务层
- Web 应用程序
【问题讨论】: