我有一个三层结构
1.介绍层
2.业务层
3.数据层
表示层通过服务门面业务层交互。现在我很困惑我应该在哪里抛出异常,我应该在哪里登录它们,我应该在哪里捕捉并吞下它们。目前,我正在登录后在表示层中吞噬异常,而我正在记录并将它们扔到其他地方。这会导致异常获得记录三次。这不是一个大问题,但我想知道关于这方面的最佳做法。何时抛出异常以及何时记录它们?
例如: 表示层代码:
try
{
UserService.GetAllUsers() ;
}
catch(Exception ex)
{
Logger.log(ex) // exception gets logged here
// redirect to a friendly user error page
}
UserService层代码
try
{
IUserDAO userDAO = ServiceRegistry.GetRegistry().GetDAOFactory().GetUserDAO() ;
return userDao.GetAllUsers() ;
}
catch (Exception ex)
{
Logger.log(ex) ; // and here !
throw;
}
DAOLayer代码
try
{
// All db interaction code
}
catch(Exception ex)
{
Logger.log(ex) //and here !!
throw ;
}
这一切都在同一台物理机器上?或者你有服务器和客户端?在我们的应用程序中,我们通常(尝试记录)所有物理机器上的错误消息...... – Fortega 2009-12-11 07:18:04
当前这些都在同一台物理机器上,但将来我们可能会将它们放在不同的物理机器上。应该这样吗? – 2009-12-11 07:21:10
我认为它的确如此。如果服务器上存在异常,那么您希望将其记录在那里,但也要在客户端调用导致异常发生的方法,以便在两个位置上都可以追踪错误。 它可能看起来像你记录了太多/太多,但由于它会导致性能或存储问题的机会非常小,所以我会像这样离开它... – Fortega 2009-12-11 07:26:16