Вы пишете исключения для определенных проблем или общие исключения? - PullRequest
10 голосов
/ 22 августа 2008

У меня есть некоторый код, который дает идентификатор пользователя утилите, которая затем отправляет электронное письмо этому пользователю.

emailUtil.sendEmail(userId, "foo");

public void sendEmail(String userId, String message) throws MailException {
    /* ... logic that could throw a MailException */
}

MailException может быть вызвано по ряду причин, проблемами с адресом электронной почты, проблемами с почтовым шаблоном и т. Д.

У меня такой вопрос: вы создаете новый тип исключения для каждого из этих исключений и затем работаете с ними по отдельности, или вы создаете одно исключение MailException и затем сохраняете что-то в исключении (что-то читаемое компьютером, а не текст описания) ) что позволяет нам делать разные вещи в зависимости от того, что на самом деле произошло.

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

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

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

Ответы [ 11 ]

0 голосов
/ 22 августа 2008

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

Пару месяцев назад я написал в блоге об идее интернационализации исключений. Он включает в себя некоторые из идей, упомянутых выше.

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