6
respostas

Tratamento de Exceções em camadas

Bom dia Pessoal, Estou em um projeto que trabalhamos com as seguintes camadas:

Main -> Service ->DAO Quero fazer minhas próprias exceções ao realizar operações na DAO.

A pergunta é onde devo lançar(throws) as exceções, e onde devo trata-las (catch) ?

Vlw

6 respostas

Pra mim, todas as exceções devem ser tratadas na origem do problema, ou seja, na sua classe DAO.

Ou seja dar um try catch na DAo por exemplo e na outras camadas ir dando throws na assinatura do método ?

Um regra geral é dar o try/catch no lugar em que você tem a quantidade suficiente de informação para fornecer quando a exceção ocorrer.

Então eu diria que depende da exceção. Se teu DAO tem informação suficiente para tratar, é melhor que seja logo nele.

Boa tarde, Luis!

Para fazer seu DAO lançar uma exceção, basta adicionar o throw na parte do método que você acha que deve lançar e, após a assinatura do método, adicionar a palavra reservada throws, seguida do tipo de exceção que seu método irá lançar.

No exemplo, tenho uma classe própria de exceção, chamada DAOException, que estende Exception. Eu faço o lançamento de uma exceção do tipo DAOException quando houver um erro de persistência em meu EntityManager. Daí, caso haja uma exceção do tipo PersistenceException, eu a capturo e lanço uma do tipo DAOException com uma mensagem mais amigável.

No meu bean, eu pego a exceção e chamo o método getMessage(); para poder exibir a mensagem amigável.

public void adiciona(Anexo anexo) throws DAOException {
    try {
        this.manager.persist(anexo);
    } catch (PersistenceException e) {
        throw new DAOException("Falha ao adicionar o anexo.");
    }
}

Se tiver mais alguma dúvida, só postar.

Abraço.

Entendi, isso na DAO né ? Na camada de Service por exemplo eu colocaria na assinatura no método -> throw new DAOException ?

Na sua camada de Service, você daria o try-catch, capturando a DAOException.