【问题标题】:NHibernate Error reporting adviceNHibernate 错误报告建议
【发布时间】:2009-03-31 13:02:01
【问题描述】:
这与其说是一个问题,不如说是关于最佳实践的建议。我正在编写一个 ASP.Net MVC 应用程序,并且在我的 DAL 中我正在使用 NHibernate,但是如果在 DAL 中引发异常,你会怎么做?
您是否在 DAL 中捕获异常、记录错误然后重新抛出异常?
您甚至根本不尝试捕获异常并使用 global.asax 中的 Application_Error() 方法作为通用捕获所有?
您是捕获异常记录并返回一个布尔值给控制器以指示成功或失败,还是您做一些完全不同的事情?
在此基础上,您如何处理通知用户的问题?您是显示通用的“发生错误 - 请重试”类型的页面,还是显示更多信息错误?
【问题讨论】:
标签:
nhibernate
error-handling
【解决方案1】:
这正是那些“视情况而定”的问题之一。我就是这样做的:
- 处理 Application_Error(或类似接收器位置)中的所有异常
- 如果异常是基于业务逻辑的 - 比如说不能有重复项,只需捕获它并对其采取行动。
- 如果它是基础架构异常并且很有可能您可以通过重试来修复它 - 在 DAL 中处理它。
- 向用户传播特定的异常信息几乎没有任何好处,因为通常用户对此无能为力。因此,一般的错误消息通常就够用了。
- 所有意外和选定的预期异常都需要记录尽可能多的信息。还建议您收到包含异常信息的电子邮件。
现在专门针对 NHibernate - 如果 NH 抛出异常,建议您关闭并丢弃当前活动的 ISession 并失败。因为会话可能处于未知/不一致的状态,并且尝试恢复它可能弊大于利。
显然取决于您的应用程序的规模和类型以及各种系统/程序员/等的数量。涉及到你真的可以自己处理日志记录。