[quote=“JohnTortugo”]Olá Felipe, Obrigado por responder.
O problema que me deparo é o seguinte. Suponhamos que temos uma equipe de pessoas que desenvolva a camada de persistência para posteriormente iniciar a camada de negócio.
Na minha camada de persistência tenho um método que lista objetos, e digamos que as exceções aException, bException e cException possam acontecer nesse método… O que devo fazer? faço um try catch e apenas dou um e.printStackTrace() e retorno nulll?
[/quote]
NUNCA FAÇA ISSO. NUNCA JAMAIS!
[quote]
dou e.printStrackTrace() seguido de um trows? nesse caso não séria melhor eu apenas adicionar um throws ao método?
O problema se resume a: tenho que ficar tratando as mesmas exceções em todas as camadas da aplicação?
Grato, JOhn.
[/quote]
Quando uma exceção ocorre vc deve saber se pode resolvê-la. Ou seja, se o programa pode driblar o problema. Se pode, simplesmente resolve e pronto. Sem log, sem throw.
Se não pode tratar então deve encapsular a exceção numa exceção própria que pertence À camada em questão. por exemplo PersistenceException , BusinessException ou PresentationException. Vc mesmo cria estas exceções e coloca nos pacotes respectivos. Todas os métodos das classes desses pacotes so podem fazer throw deste tipo de exceção.
Des forma, quando a camada de negocio receber uma exceção de persistência, ela pode tentar resolver o problema, por exemplo dando um roolback no processo. O uexecuntando uma logica alternativa. Se não poder, dve encapsular a exceção numa das suas e passar à frente
E assim vai, até atingir a ultima camada.
Quando chegar nesta camada , deve ser possivel dicidir se a exceção é especifica de tal forma que podemos mostrar uma mensagem ao usuário ou se é generica. Se for expecifica como por exemplo ServerNotFound ou ComunicationImpossible deve ser mostrado ao usuário uma mensagem do tipo “Não foi possivel localizar o servidor, verifique está ligado À internet”
Se for geral apenas “Um erro inexperado aconteceu…” e dar uma sugestão do que fazer.
Ou seja, se o usuário tem uma palavra a dizer na resolusção da exceção ,e ele deve ser avisado em termos compreensiveis do fato. Caso contrario, ele deve ser avisado que não foi possivel resolver o problema.
Antes de passar a excção ao usuário ela deve ser logada (usando o Log4j por exemplo) para futuro inspeção pelo desenvolvedor (se possivel)
Ou seja, vc tem que tratar sim a exceções em todas as camadas, para as resolver ou encapsular para a camada seguinte. Isto pode parecer chato, mas se vc criar algumas classes utilitárias resolve-se facilmente.
Dica: as execções que vc criar deve ser RuntimeException e os métodos mais exteriores da camada (os que são cahamdos pelas outras camadas) devem declarar no throws o tipo de excção de lançam por exmeplo
public List queryProdutsByID(String id) throws PersistenceException