Могу ли я иметь бизнес-логику в блоке finally?

Желательно ли иметь бизнес-логику в блоке finally? Я должен отправить уведомление по электронной почте, когда работа закончена (независимо от того, успешна она или нет). Могу ли я разместить логику электронной почты в блоке finally?

1
задан Mayank 28 August 2010 в 05:24
поделиться

4 ответа

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

Например,

try {
    doSomethingFancy();
} finally {
    sendEmail();
}

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

Вы могли бы обойти это с помощью дополнительных блоков try/catch, но имейте в виду...

1
ответ дан 2 September 2019 в 21:45
поделиться

В идеале ваша бизнес-логика должна находиться в блоке Try, а блок finally должен содержать любую задачу очистки или любую вещь, которая должна произойти независимо от успеха или неудачи блока try. Вы также должны убедиться, что код в блоке finally не вызывает никаких исключений, иначе, как упомянул Стивен, исходное исключение будет потеряно, если оно есть.

1
ответ дан 2 September 2019 в 21:45
поделиться

Вы можете сделать это в блоке catch, если вы собираетесь отправить сообщение об ошибке на указанный адрес электронной почты. Блок finally обычно используется для постепенного освобождения ресурсов. Я не рекомендую отправлять электронную почту или выполнять какие-либо бизнес-правила в блоке finally.

0
ответ дан 2 September 2019 в 21:45
поделиться

На мой взгляд,

try {
    doSomethingFancy();
catch(Exception ex) {
    logError(ex);
}
sendMail();

идеальный образец для этого. Блок finally следует использовать только для очистки беспорядка, который мог оставить код в блоке try.

0
ответ дан 2 September 2019 в 21:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: