8.2. Exceções, barricadas e código de depuração
Exceção só para o excepcional; barricada na fronteira; falhe alto em desenvolvimento.
Resumo
- Exceções: só para o realmente excepcional; no nível de abstração certo; nunca
catchvazio. - Barricada: classes na fronteira validam e limpam; do lado de dentro assume-se dado limpo.
- Fora da barricada: tratamento de erro. Dentro: asserções (dado ruim lá dentro é bug).
- Programação ofensiva: em desenvolvimento, falhe de forma visível e barulhenta para achar o bug cedo.
- Produção: mantenha checagens importantes, remova as triviais e as que travam; registre erros; mensagens amigáveis.
Perguntas-chave
responda de cabeça, depois abraO que é lançar exceção no nível de abstração errado?
Por exemplo, Funcionario.getId() lançar EOFException: expõe um detalhe de implementação (arquivo) na interface de um conceito do domínio.
Como funciona a barricada?
Rotinas na interface externa validam e sanitizam os dados; as classes internas assumem que tudo que chega está correto.
O que deixar na versão de produção?
Checagens de erros importantes, código que ajuda a falhar de forma elegante e registro de erros; tirar o que é trivial ou causa travamentos.
Exercícios de fixação
0/5 respondidas1.
Funcionario.getEndereco() lança SQLException para quem chama. Qual o problema?2.
try { gravar(); } catch (Exception e) { } é um exemplo de:3.
Numa arquitetura com barricada, o que fazer quando uma classe interna recebe dado inválido?
4.
Programação ofensiva, durante o desenvolvimento, significa:
5.
Usar exceção para sair de um laço comum de leitura de arquivo, como fluxo normal, é: