2012-05-20 2 views
0

Могу ли я использовать Spring DataAccessException непосредственно на уровне обслуживания ?. Является ли это хорошей практикой/дизайном для распространения рамочного рабочего класса на уровне обслуживания ?.Могу ли я использовать Spring DataAccessException непосредственно на уровне обслуживания

ИЛИ

я должен поймать DataAccessException в дао слое и повторно выдать его как-то более общих исключений?

ответ

1

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

+0

не это влияет на разделение задач между службой слоем и дао слоем .. Что ваш подход к нему? – rohit

+0

Нет разделения - это односторонние отношения, по необходимости. Уровень обслуживания знает о DAO, но не наоборот. Хорошо. – duffymo

+0

Сервисный уровень знает о DAO, но он потенциально не знает о Spring. Он не будет вводить новую библиотечную зависимость, но потенциально концептуальную. Необычно на практике, возможно, но DAO можно было бы использовать по-разному ... Не уверен в этом; еще думаю. –

1

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

+0

Я не согласен с этим. Уровень сервиса может отображать его, но нет значения в уровне персистентности, который обертывает свое собственное исключение. Сервисный слой должен поймать его и обработать. Обертка только теряет информацию. – duffymo

+0

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

+0

Нет, сервисный слой не должен его обертывать. Он должен справиться с этим, а не повторять бросок. Это совсем другое дело. – duffymo

0

Лично я улавливаю все проверенные исключения в сервисном слое и бросаю свои собственные ServiceExceptions, инициализируя их с помощью зацепившегося исключения. Таким образом, информация об исключении не теряется, и контролерам не нужно иметь дело с исключениями низкого уровня. Но нет необходимости делать это в слое DAO.

Существует довольно хорошая глава по обработке исключений в «Эффективной Java» (J. Bloch), это хорошо прочитанное, а также остальная часть книги. Пункт 61 касается этого вопроса.

http://books.google.de/books/about/Effective_Java.html?id=Ft8t0S4VjmwC

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