Como tratar SQLException de forma elegante?

2 respostas
M

Quando estamos construindo a camada de persistencia geralmente encontramos métodos que disparam uma SQLException.Gostaria de saber dos amigos qual a melhor forma de lidar com exceções na camada de persistencia,por exemplo, usando o try catch dentro do metodo ou adicionando uma clausula throws e deixar que a camada de negocio trate a exceção.Antecipadamente muito obrigado!!! :cool:

2 Respostas

C

Voce pode fazer das seguintes maneiras:

  • public Object buscaDados(Lond id) throws SQLException{

    }

*public Object buscaDados(Long id) {
Try{

}catch(SQLException e){

throw new MinhaException(Erro de SQL);

}catch(Exception e){

throw new MinhaException(Erro sem volta);

}

}

//---------------------

Na primeira forma, usando o throws no cabeçalho da rotina, quem chamar o metodo vai ter que proteger com um bloco try/catch, o que nao eh mto elegante, e na segunda nao.

Numa estrutura de um sistema, quem desenvolve telas que acessam uma estrutura que nao foi feita por eles, no caso outro grupo de programadores, logo tem que saber apenas dos nomes dos metodos da estrutura para serem ligados a Interface grafiica, logo nao sabendo como os metodos da estrutura funcionem.

L

Sugestão: trata com try catch dentro do Dao e depois dispara uma exceção colocando como causa o SQLException, por exemplo um DaoException, ou PersistenceException seila, porque?! porque quem tem a responsabilidade de acessar os dados é o Dao, um SQLException é uma exceção que tem a ver com banco de dados, e a camada de negócio não precisa saber detalhes de onde está sendo acessado o dado (se é banco de dados, arquivo, xml etc). Deixando para a camada de negócio tratar um SQLException, vc praticamente diz que seus Dao’s sempre irão acessar um banco de dados (sim, eles provavelmente sempre vão fazer isso, mas… se quer ser elegante heheh)… agora se eles lançarem uma exceção sua, o dia que vc trocar por daos que acessem diretamente arquivos e que lançam IOException, você não precisa mudar a camada de negócio, pois seus DAO’s podem lançar uma exceção que é sua, logo os IOException vão estar encapsulados como causa na sua exceção.

Criado 20 de julho de 2007
Ultima resposta 20 de jul. de 2007
Respostas 2
Participantes 3