Лучшая практика - обработка исключений на уровне сервисов / дао / бизнес - PullRequest
0 голосов
/ 11 февраля 2012

Как лучше всего обрабатывать исключения, когда в разных уровнях выдается ошибка.

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

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

Ниже приведены фрагменты кода:

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

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;
}
}

На уровне представления пусть это будеткласс контроллера

 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 внешнего интерфейса.

1 Ответ

2 голосов
/ 30 июля 2012

Вы должны заключить бизнес-исключение в 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());
}
...