Em qualquer sistema, as exceções sempre irão existir, e por motivos diversos:
- a importação de um arquivo com um dado não esperado,
- uma sobrecarga no sistema que provocou um timeout em uma operação,
- uma tabela que esqueceram de atualizar no banco,
- o disco que encheu,
- um arquivo com permissão de somente-leitura,
- um possível bug,
- etc etc etc.
Estas ações são indesejáveis e, por mais exaustivamente que se teste o sistema, você nunca terá a garantia que estará livre dos problemas acima. Você dificilmente conseguirá sempre realizar testes para todas estas condições e tantas outras não listadas.
Mas o que temos que fazer afinal?
Tratar a exceção da melhor maneira possível, informando a exceção com precisão no log, e passando uma mensagem precisa ao usuário. Mas as vezes encontramos exatamente o contrário, trechos de código que captura a exceção, e segue em frente como se nada tivesse acontecido.
 |
| Não faça isso com sua exceção |
Abaixo estão alguns exemplos do que NÃO se deve fazer:
catch (IOException e) {
return null;
}
Ou
catch (IOException e) { }
Com isso, além de simplesmente retornar nulo (ou não fazer nada), ao invés de manipula-la, ou relançar a exceção, você joga fora de vez qualquer informação referente ao problema que gerou a exceção.
Outras maneiras de esconder a exceção:
catch (IOException e) {
log.error("Erro", e);
return null;
}
Ou
catch (IOException e) {
e.printStackTrace();
return null;
}
Ou
catch (IOException e) {
e.printStackTrace(); // Ou log.error("Erro", e);
}
De maneira similar as situações anteriores, a única diferença é que a exceção, pelo menos, foi logada, mas o fluxo de execução continua normalmente. Isto nem sempre está errado, mas muitas vezes o programador não insere este código nos pontos apropriados. Ao invés de retornar nulo ou seguir com o fluxo de execução, a exceção deveria ser tratada.
Nenhum comentário:
Postar um comentário