DAO + DAOFactory + GenericDAO + Interface - Correto ou exagero?

6 respostas
J

Estou refatorando e melhorando o meu sistema e surgiu uma duvida agora. Antes eu soh usava o GenericDAO e DAO, aí vi varios exemplo usando Interface e outros usando DAOFactory, resolvi tentar fazer com todos esses padroes e funcionou, mas a dúvida é: posso fazer isso? Não tem padrao demais? Nao tem coisa redundante?
A minha estrutura ficou assim:

AlunoDAO:

//imports

public class AlunoDAO extends GenericDAO<Aluno> implements InterfaceAlunoDAO {

    public AlunoDAO(Session session, Class<?> classe) {
        super(session, classe);
    }

    public Aluno carregar(String nome) throws HibernateException {
        
    }

    public List carregarTodos() throws HibernateException {
       
    }
}

GenericDAO:

//imports

public class GenericDAO<X> {

    private Class persistentClass;
    protected Session session;
    protected Transaction transaction;
    protected SessionFactory sessionFactory = HibernateUtil.getSessionFactory();

    public GenericDAO(Session session, Class persistentClass) {
        this.session = session;
        this.persistentClass = persistentClass;
    }

    public void Salvar(X x) throws HibernateException {
       
    }

    public void Atualizar(X x) throws HibernateException {
     
    }

    @SuppressWarnings("unchecked")
 
    }

    @SuppressWarnings("unchecked")
    public List<X> Listar() {
      
    }
}

InterfaceAlunoDAO:

public interface InterfaceAlunoDAO {

    public Aluno carregar(String nome) throws HibernateException;
    public List carregarTodos() throws HibernateException;
}

InterfaceDAOFactory:

package teste.dao;

public interface InterfaceDAOFactory {

    public InterfaceAlunoDAO criarAlunoDAO();

}

DAOFactory:

public class DAOFactory implements InterfaceDAOFactory {

    private final Session session;
    
    public DAOFactory() {
        super();
        session = HibernateUtil.getSession();
    }

    public InterfaceAlunoDAO criarAlunoDAO() {
        return new AlunoDAO(session, Aluno.class);
    }

}

Posso manter asssim ou devo retirar alguma coisa, alterar outras? O que acham?
Estava pensando em deixar apenas Interfaces + GenricDAO + DAO, mas nao enxerguei ainda como, se alguem puder me dar uma dica e uma opiniao, agradeço.

6 Respostas

J

Alguem pode me ajudar? Alguma dica?

wbdsjunior

você vai precisar de interfaces e factories se tiver mais de um método de persistência para o mesmo objeto.

por exemplo, digamos que sua aplicação funcione em diferentes arquiteturas (não sei se usei a palavra certa aqui), onde em uma delas você utilize JDBC, em outra JPA e em ainda outra XML, para persistência de dados.

você teria algo como GenericDao, AlunoDao (interface), AlunoJdbcDao, AlunoJpaDao e AlunoXmlDao que extenderiam GenereicDao e implementariam AlunoDao e uma AlunoDaoFactory que decidiria qual das implementações de UsuarioDao seria instanciada.

se não for o seu caso, tudo isso é desnecessário.

J

Entao esse nao eh meu caso, pois soh vou usar Hibernate mesmo, nada mais. Acho que vou manter apenas o DAO normal e GenericDAO

wbdsjunior

é isso aí!

Leozin

Eu acho que é exagero ter tudo isso de factories, daos etc

tu já pensou em usar Spring? Já elimina boa parte dos teus factories :slight_smile:

rogelgarcia

O Spring é uma boa dica…

Tem um tutorial básico para iniciar ele aqui:

http://www.javaframework.org/portal/2010/03/14/hello-world-com-spring-3-para-um-projeto-web/

e aqui

http://www.javaframework.org/portal/2010/03/15/spring-3-configurando-beans-com-annotations/

Leia nessa ordem…

Eu também não gosto muito de milhares de interfaces na aplicaçao… mesmo porque só existirá uma implementacao… prefiro ser mais prático nesse sentido

Criado 22 de março de 2010
Ultima resposta 23 de mar. de 2010
Respostas 6
Participantes 5