我有一個三層結構
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