Пустые catch блоки это плохо?

Вот упрощенный вариант того, как я использую Try-Catch
class Database {
    public void addRow() throws SQLException {
        try { /* Add row */ }
        catch(SQLException e) {
            log.error(e);
            throw e;
        }
    }
}

class Context1 {
    public void doSomething(Database db) throws SQLException {
        db.addRow(); //If throws exception then main exception handler executes sendMessage("failed");
        sendMessage("success");
    }
}

class Context2 {
    public void doSomething(Database db) {
        try { db.addRow(); }
        catch (SQLException ignored) {}
    }
}

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

Как быть в такой ситуации?
  • Вопрос задан
  • 3922 просмотра
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Вообще-то, обработка исключений и сами исключения - зло, которое должно случаться совсем редко, лучше самому проверять параметры, а все исключения обрабатывать на самом верху. Еще лучше использовать объект типа context , куда загонять все свои ошибки и передавать его например как thread переменную. Ну а если уж и случилось исключение, то это действительно должна быть исключительная ситуация, типа нарушения транзакции или обрыв коннекта. Избегайте ситуаций, когда исключения используются для валидации и преобразования параметров - это зло, лучше добавьте пару ифов или сделайте интроспекцию с кейсом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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