MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

DAO e injeção de dependência, conselho?


Uma camada DAO "conectável" é geralmente/sempre baseada em uma interface DAO. Por exemplo, vamos considerar um simples bastante genérico:
public interface GenericDAO <T, K extends Serializable> {  
    List<T> getAll(Class<T> typeClass);   
    T findByKey(Class<T> typeClass, K id);  
    void update(T object);  
    void remove(T object);  
    void insert(T object);  
}

(Isso é o que você tem em DAO genérico do Morphia )

Então você pode desenvolver várias implementações genéricas de DAO, onde você pode encontrar diferentes campos (refletidos em parâmetros do construtor, setters e getters, etc). Vamos supor um baseado em JDBC:
public class GenericDAOJDBCImpl<T, K extends Serializable> implements GenericDAO<T, K extends Serializable> {
    private String db_url;

    private Connection;
    private PreparedStatement insert;
    // etc.
}

Uma vez que o DAO genérico é implementado (para um armazenamento de dados concreto), obter um DAO concreto seria um acéfalo:
public interface PersonDAO extends GenericDAO<Person, Long> {

}

e
public class PersonDAOJDBCImpl extends GenericDAOJDBCImpl<Person, Long> implements PersonDAO {

}

(BTW, o que você tem em BasicDAO do Morphia é uma implementação do DAO genérico para MongoDB).

A segunda coisa na arquitetura plugável é a seleção da implementação concreta do DAO. Eu aconselho você a ler o capítulo 2 de Apress:Pro Spring 2.5 ("Putting Spring into "Hello World") para aprender progressivamente sobre fábricas e injeção de dependência.