【发布时间】:2010-12-25 13:46:58
【问题描述】:
我有一个三层结构
1.表现层
2.业务层
3. 数据层
表示层通过服务外观与业务层交互。现在我很困惑我应该在哪里抛出我的异常,我应该在哪里记录它们以及我应该在哪里捕获和吞下它们。目前,我正在记录后在我的表示层中吞下我的异常,而我正在记录并将它们扔到其他任何地方。这导致异常被记录三次。这不是一个大问题,但我想知道这方面的最佳做法。
例如: 表示层代码:
try
{
UserService.GetAllUsers() ;
}
catch(Exception ex )
{
Logger.log(ex) // exception gets logged here
// redirect to a friendly user error page
}
用户服务层代码
try
{
IUserDAO userDAO = ServiceRegistry.GetRegistry().GetDAOFactory().GetUserDAO() ;
return userDao.GetAllUsers() ;
}
catch ( Exception ex)
{
Logger.log(ex) ; // and here !
throw;
}
DAOL层代码
try
{
// All db interaction code
}
catch(Exception ex)
{
Logger.log(ex) //and here !!
throw ;
}
【问题讨论】:
-
这一切都在同一台物理机器上吗?或者你有服务器和客户端吗?在我们的应用程序中,我们通常(尝试在所有物理机上记录)一次错误消息...
-
目前这些都在同一台物理机上,但将来我们可能实际上将它们放在不同的物理机上。这有关系吗?
-
我认为确实如此。如果服务器上出现异常,您希望将其记录到那里,但也希望在调用导致异常发生的方法的客户端上记录,因此可以在两个位置跟踪错误。可能看起来您记录了很多/太多,但由于它而出现性能或存储问题的可能性非常小,所以我会这样......