Dúvida com a criação de exceções

Olá a todos,

Bom faz tempo que estou para mandar esta pergunta, porém ai vai. Seguinte, tenho dificuldade em trabalhar com exceptions, vejam, estou desenvolvendo uma aplicação Destkop, nela tenho uma classe DAO que efetua operações com o Banco através do Hibernate, vejam:

public class UsuarioDAO {
    
    public UsuarioDAO(){
        HibernateFactory.beginTransaction();
    }
    
    public void salvarUsuario(Usuario usuario){
        try{
            Usuario user = null;
            
            Criteria criterio = HibernateFactory.getSession()
                                            .createCriteria(Usuario.class);
            
            criterio.add(Expression.like("NOME_USUARIO", usuario.getNomeUsuario(), MatchMode.EXACT));
            
            user = (Usuario) criterio.uniqueResult();
            
            if(user == null){
                HibernateFactory.getSession().save(usuario);
                HibernateFactory.getSession().flush();
                HibernateFactory.commitTransaction();                
            } else{
                JOptionPane.showMessageDialog(null,
                        "Já existe um usuário cadastrado no sistema com este [nick]",
                        "Mensagem do sistema...",
                        JOptionPane.ERROR_MESSAGE);
            }
        } catch (Exception e){
            
        }
    }

Só coloquei o metodo salvar, nele faço uma pesquisa para ver se já existe um usuário cadastrado com este nick, então caso exista é lançado uma mensagem através de um JOptionPane, a dúvida é, desse jeito está bom, ou é melhor criar classes com exceptions para em vez de lançar uma mensagem e lançar uma exception.

Outro detalhe, é correto lançar mensagens no meio deste código?

Att,

Paulo

public class UsuarioDAO {
    
    public UsuarioDAO(){
        HibernateFactory.beginTransaction();
    }
    
    public void salvarUsuario(Usuario usuario) throws Exception { // :) 
        try{
            Usuario user = null;
            
            Criteria criterio = HibernateFactory.getSession()
                                            .createCriteria(Usuario.class);
            
            criterio.add(Expression.like("NOME_USUARIO", usuario.getNomeUsuario(), MatchMode.EXACT));
            
            user = (Usuario) criterio.uniqueResult();
            
            if(user == null){
                HibernateFactory.getSession().save(usuario);
                HibernateFactory.getSession().flush();
                HibernateFactory.commitTransaction();                
            } else{
                        throw new Exception("Já existe um usuário cadastrado no sistema com este [nick]");
            }
        } catch (Exception e){
            throw e;
        }
    }

E sei lah onde vc for executar isso:

               UsuarioDAO theUser = new UsuarioDAO();
               Usuario u = new Usuario();
               try {
                            theUser.salvar(u);
               } catch (Exception ee){
                           JOptionPane.showMessageDialog(this, ee.getMessage());
               }

É sempre bom deixar as mensagems somente na interface com o usario, vai que essa sua classe esta rodando em um servidor linux que soh tem modo texto… como ela vai mostar um joptionpane?

[]'s

Concordo.

Na minha opinão, em uma DAO nunca se dever interagir diretamente com o usuário. A camada de apresentação que deve saber o que fazer, uma vez que um erro no DAO é detectado.

Ou seja, declare a exceção!!!
:slight_smile:

tem que saber separar as coisas…

INTERFACE COM USUARIO: Exibe e Envia dados para a APLICACAO

APLICACA: FAZ REALMENTE A COISA FUNCIONAR, RETORNANDO VALORES PARA A APLICACAO, DA MAIS TRABALHO PARA DESENVOLVER, MAS MENOS TRABALHO PARA DAR MANUTENCAO NO FUTURO.

[]s

Galera,

Valeu pelas dicas, agora aproveitando como faço para usar o façade?

Att,

Paulo