2012-02-11 2 views
0

Какова наилучшая практика обработки исключений при возникновении ошибки в разных слоях.Лучшая практика - обработка исключений в служебных/дао/бизнес-слоях

У меня есть 4 слоя кода - DAO, SERVICE, BUSINESS, PRESENTATION. Я пытаюсь поймать некоторое исключение времени выполнения на уровне dao и хочу, чтобы он отображался на уровне презентации с некоторым сообщением. Подходит ли подход ниже?

Здесь, в фрагментах кода - DataException - мой класс исключений во время выполнения. Классы исключений для служебного и бизнес-класса - это мои проверенные классы реализации исключений.

Фрагменты кода ниже:

В дао слое, метод проверяет некоторое значение из базы данных

class dao{ 
public User getUser() throws DataException{ 

User user = null; 

try 
{ 
//some operation to fetch data using hibernatetemplate 
}catch(Exception ex){ 
throw new DataException(ex.getMessage()); 
} 

return user; 
} 
} 

service.java

class service{ 
public User getUser(String username) throws ServiceException{ 

User user = null; 

try 
{ 
//some operation to fetch data using dao method 
dao.getuser(username); 
}catch(DataException ex){ 
throw new ServiceException(ex.getMessage()); 
} 

return user; 
} 
} 

business.java

class business{ 
public User getUser(String username) throws BusinessException{ 

User user = null; 

try 
{ 
//some operation to fetch data using dao method 
service.getuser(username); 
}catch(ServiceException ex){ 
throw new BusinessException(ex.getMessage()); 
} 

return user; 
} 
} 

В pre sentation слой, пусть это будет класс контроллера

class Presentation{ 
public User getUser(String username) throws BusinessException{ 

    User user = null; 


//some operation to fetch data using business method 
business.getUser(username); 

    return user; 
} 
} 

Предположит, из сообщения презентации слоя брошен пользователю в передней части страницы JSP ..

ответ

2

Вы должны инкапсулировать бизнес-исключение в PresentationException с код. Этот код используется для визуализации сообщения об ошибке локализованным способом. Код позволяет сообщение об ошибке быть чисто в презентации и иметь разные сообщения для разных представлений.

try{ 
    getUser(...); 
}catch(BusinessException b){ 
    throw new PresentationException(ErrorEnum.GetUserError,b); 
} 

Это исключение должно быть помещено в модель (просмотреть контекст) каким-то образом.

В JSP вы можете сделать что-то вроде:

if(exception){ 
if(debug) print(exception.getCause().getMessage()); 
else print(localize(exception.getErrorCode()); 
} 
Смежные вопросы