Java: обработка ошибок в проекте MVC.Как правильно осуществить? - PullRequest
1 голос
/ 30 января 2012

Например: у нас есть WebApplication на основе MVC. Также для этого приложения мы используем: Spring, Struts 2 и Hibernate рамки.

Давайте рассмотрим небольшой сценарий: пользователь попытается сохранить инстанс, например: BO Book.

Итак, пользователь заполняет поля формы и отправляет запрос на сервер:

Что случилось на сервере?

  • Выполнить метод действия Action.Save();
  • Внутри Action.Save() Звоните Service.save();
  • Внутри Service.save() Звоните DaoHibernate.save();
  • Внутри DaoHibernate.save() Звоните getHibernateTemplate().save();

Метод getHibernateTemplate.save() - это реализация фреймворка, поэтому мы не можем получить доступ к этому методу. Мы только знаем, что если что-то не работает внутри этого метода, выдается DataAccessException.

Итак, на данный момент я думаю, как правильно реализовать мою регистрацию и обработку ошибок?

На каком уровне?

На уровне Дао? Уровень обслуживания?

Или на уровне действий Struts?

Что вы думаете об этом?

Или нужно на каждом уровне?

Какие лучшие практики вы можете порекомендовать?

1 Ответ

3 голосов
/ 30 января 2012

Вот ваша архитектура:

enter image description here

Как вы хотите обработать ошибку на уровне DAO?Вернуть поддельные данные?Пустая коллекция?если вы не можете, просто позвольте всплывающему исключению.

А как насчет обработки на уровне сервиса?Вы знаете, что база данных не работает, так что вы можете вернуться к действию Struts?Пустой результат?Объект ошибки?Не является ли исключение объектом ошибки?

Таким образом, исключение появляется в действии Struts.Здесь у вас есть несколько вариантов.Если исключение действительно скажет что-то пользователю, и ваш графический интерфейс подготовлен, вы можете вернуть другое представление (и зарегистрировать исключение здесь).

Но что, если вы поймаете NullPointerException в действии Struts?Будете ли вы обрабатывать это отдельно в каждом действии Struts?Нет, так что передавайте исключение еще дальше (!)

Я думаю, вы поняли - пока вы не знаете, как обработать исключение (и ведение журнала не обрабатывает ), пусть клиент наведет порядок.В противном случае вы только скрываете проблему и увеличиваете убытки (например, транзакции не откатываются, пользователи видят неверные результаты).

Я бы посоветовал внедрить generic механизм обработки исключений, который регистрирует исключение и возвращает HTTP 500 пользователю.Должно появиться мягкое сообщение об ошибке ( без трассировки стека), и пользователь должен извиниться.Вы должны исследовать каждую ошибку, которая достигает этого уровня.

Насколько я помню, Struts (и практически каждая веб-инфраструктура) имеет некоторый централизованный способ обработки исключений.( Документы по обработке исключений Struts 2 )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...