2015-12-05 2 views
1

Я работаю над новым приложением Spring MVC. У меня есть несколько потоков, когда контроллер отправляет запрос бизнес-менеджеру, а дальнейший бизнес-менеджер будет разговаривать с уровнем DAO для извлечения данных.Весна, где бросать исключение

Возможны случаи, когда я не получаю данные от DAO. Я хочу понять, что лучший способ справиться с этой ситуацией.

1) Когда когда-либо не будет получено данных для запроса, то выберите «Пользовательский исключение», например «Не найденный контент», от уровня DAO до уровня «Бизнес», а затем «Контроллер» и пусть контроллер решит, что делать.

2) Возврат пустой/пустой объект Pojo обратно в бизнес-менеджер и пусть менеджер выдает исключение для контроллера.

3) Контролер получает пустую/пустую информацию от Менеджера и решает, что с этим делать.

Я нахожу 1-й подход лучше, как при исключении, у меня есть полная трассировка стека, чтобы понять, где именно возникла эта проблема, но с другой стороны я в конечном итоге загромождаю свой код Исключением в подписях.

Номер 3 оставит код чистым, но я не смогу указать, где именно извлечение данных завершилось неудачно, так как может быть несколько вызовов в DAO из бизнес-уровня.

ответ

1

сгенерирует исключение на уровне, где положение не имеющих совпадающие записи (другими словами, нет данных, подлежащих обработке) на самом деле является исключительным .

Это во многом зависит от специфики вашего домена, но зачастую лучше всего просто вернуть пустой объект-контейнер из DAO, если в базе данных не было соответствующего объекта. То есть: Collections.emptyList(), Optional.empty() или что-то с аналогичной семантикой. Под нет обстоятельства возврат null, это 2015 в конце концов.

Если у вас нет подходящих данных, это исключительная ситуация в вашем бизнес-домене, перевести это на конкретное исключение на уровне сервиса и позволить контроллеру справиться с этим, переведя снова: на HTML-страницу с ошибкой, определенный ответ XML или JSON или независимо от того, какой интерфейс использует ваш пользователь для взаимодействия с вашей системой.

1

Я предлагаю вам бросить пользовательские исключения на каждом уровне. Каждый уровень должен знать об обработке исключений.

Его прекрасно объяснено в приведенной ниже ссылке.

Handling Dao exceptions in service layer

1

Уровень DAO выполняет запросы и возвращает результаты. Он не заботится о результатах, поэтому «ничего не найдено» не может быть исключительной ситуацией на уровне DAO. Это может быть в бизнес-слое, но это не обязательно.

я не смогу точно указать, где именно получение данных не удалось

Если случай использования http://server/something/2 и something 2 не существует в базе данных, то просто нет отказа на сервере боковая сторона.Поэтому, если в контроллере нет исключения или только один контроллер, вы можете быть уверены, что данные не будут возвращены клиенту, потому что данных нет.

Смежные вопросы