Retornando erros entre camadas

3 respostas
hlegius

Salve povo !

Até recentemente tenho usado muito as Exceptions para retornar erros entre as camadas das aplicações. Para mim aquilo estava ok, porém, lendo o livro Pragmatic Programmer há um tópico que diz: "use Exceptions para exceções. Nos demais casos retorne um erro normal". Não estou certo de quão bem funcionaria isto, uma vez que a aplicação tem camadas e por este motivo eu precisaria ficar fazendo uso de return e avaliando as condições para saber o que aconteceu (se deu certo ou nao)

Rabiscando rapidamente:

public Cliente add(Cliente cli) {
     if (!cli.hasName()) {
          return 'Nome inválido'; // tudo bem que aqui não é lugar para validar, mas pula isso =~
     }

     try {
         this.repositorio.salvaAqui(cli);
         return cli;
     } catch (ConnectionFoobarException coe) {
         // conexao FAIL. Isto sim é uma exceção oO'
     }
}
// ... fim da classe e pá

Imaginando assim penso que ficaria uma zona o código, pois caso sucesso recebo um Objeto, do contrário uma string além da "Exception" que possa a ter para tratar possíveis exceções :/

Alguém que tenha lido o livro ou visto algo sobre poderia discorrer sobre ?

Abraços !

3 Respostas

eldercrul

eu também prefiro usar Exceptions sempre,
pelo q li em uma apostila de java básico da Caelum http://www.caelum.com.br/downloads/apostila/caelum-java-objetos-fj11.pdf
uma possibilidade é criar uma tabela de erros, e retornar um número mágico do erro, para indexar esta tabela
mas usar esses números mágicos , é considerado uma má prática.

Y

O que usei muitas vezes foi por o objeto em Estado de Erro, e fazer com que ele guarde uma lista de mensagens de erro que as camadas superiores leem, assim eu nao preciso por valor de retorno nos metodos.

Mas com o tempo eu nao vi muita vantagem nessa abordagem tambem, acaba ficando chato de programar pra tao pouco ganho. Entao voltei as boas e velhas exceptions.

Julgo da seguinte forma: Se vou precisar da intervencao do usuario novamente para a mesma operação lanco uma excecao, por mais que seja só porque ele nao informou um campo obrigatorio, só torno a exibição da mensagem diferente de uma mensagem de erro da aplicacao.

H

Eu recomendo a leitura deste post escripto pelo Phillip Calçado em seu blog.

http://fragmental.tw/2008/12/04/layers-and-exceptions/

Criado 31 de julho de 2009
Ultima resposta 1 de ago. de 2009
Respostas 3
Participantes 4