Ajuda interface unica para DAO

11 respostas
E

Gente eu estou com esta divisao . VO - Interace - DAO

Onde eu tenho varias VO’s . Sendo que que meu dao vai dar um implements das minhas interfaces e o parametros dessas interfaces sao as minhas VO’s .

Gente eu quero criar uma unica interface onde fosse usada em todos os dao independente dos VO’s qe serao passados por parametro .

Ex.:

public interface InterfaceUnica {
             public void incluir(") throws SQLException ;
    }

Onde DAO vao implementar esta interface sendo que ele passa VO’s diferentes …

11 Respostas

G

Crie um DAO genérico:

public interface GenericDAO() {

}

E não acople essa interface a um objeto específico. Faça assim:

public interface GenericDAO() {

    void save(Object o);
    
    void update(Object o);

    void delete(Object o);

}

Entendeu ?

E

Vc poderia explicar mlehor !? 8O

G
"eclipse_lunar":
Gente eu estou com esta divisao . VO - Interace - DAO

Ok.

"eclipse_lunar":
Onde eu tenho varias VO's . Sendo que que meu dao vai dar um implements das minhas interfaces e o parametros dessas interfaces sao as minhas VO's .

Sim, acho que você quis dizer que tem mais ou menos isso:

public interface InterfaceUnica {
   public void incluir(AlunoVO) ;
} 

public class AlunoDAO implements InterfaceUnica {

   public void incluir(AlunoVO)  {
      // toda a lógica para inserir o aluno do DB...  
   }

}
"eclipse_lunar":
Gente eu quero criar uma unica interface onde fosse usada em todos os dao independente dos VO's qe serao passados por parametro .

Ex.:

public interface InterfaceUnica {
             public void incluir(") throws SQLException ;
    }

Onde DAO vao implementar esta interface sendo que ele passa VO's diferentes ..

Certo. Da forma que eu fiz acima, a interface não pode ser reutilizada pois o método incluir() está acoplado ao AlunoVO.

Para desacoplar e utilizar a interface em todos os DAOs, basta fazer como eu disse:

public interface GenericDAO() {

    // em vez de passar um objeto específico eu passo um Object
    void incluir(Object o);

}

Agora eu posso usar essa interface para todos os DAOs:

public class AlunoDAO implements GenericDAO() {
 
   void incluir(Object o) {
      // incluir toda a lógica de inserção (JDB/Hibernate)....
   }

}
public class ProfessorDAO implements GenericDAO() {
 
   void incluir(Object o) {
      // incluir toda a lógica de inserção (JDB/Hibernate)....
   }

}

E para utilizar o DAO:

AlunoDAO dao = new AlunoDAO();
dao.incluir(alunoVO);

Ficou mais claro ? :lol:

E

Pow valeu mesmo pela atenção …e fikou bem claro agora pois era isso mesmo que eu estava querendo .

So mas uma pergunta !?

Como eu faria para Esses (Object o ) identificar a Vo que eu estou passando ?

Agradeço por mas essa …

G

“eclipse_lunar”:
Pow valeu mesmo pela atenção …e fikou bem claro agora pois era isso mesmo que eu estava querendo .

So mas uma pergunta !?

Como eu faria para Esses (Object o ) identificar a Vo que eu estou passando ?

Agradeço por mas essa …

Como assim indentificar ? explica melhor…

E

É que eu tenho varias VO’s . Com eu identificaria a vo que eu queria inserir no banco !?

J

Se você quiser algo mais sofisticado, use Generics:

public interface DAO<E>{
   public void inserir(E e);
   public void alterar(E e);
   public void excluir(E e);
   public E obterPorId(int id);
}

public class ProfessorDAO implements DAO<Professor>{
   public void inserir(Professor p){
      //insere o professor
   }
   public void alterar(Professor p){
      //altera o professor
   }
   public void excluir(Professor p){
      //exclui o professor
   }
   public Professor obterPorId(int id){
        //obtem o professor
   }
}

public class AlunoDAO implements DAO<Aluno>{
   public void inserir(Aluno a){
       //insere o aluno
   }
   public void alterar(Aluno a){
      //altera o aluno
   }
   public void excluir(Aluno a){
       //excluir o aluno
   }
   public Aluno obterPorId(int id){
       //obtem o aluno
   }
}
G

O VO seria identificado assim:

dao.incluir(alunoVO);

Pois você saberia qual você quer inserir. Não sei se é isso que você quer.

E

Pow irmãovaleu era isso mesmo …Vcs aconselham eu fazer deste modo ?
Se nao causaria algum impacto em algo ?

G

“eclipse_lunar”:
Pow irmãovaleu era isso mesmo …Vcs aconselham eu fazer deste modo ?
Se nao causaria algum impacto em algo ?

As duas forma são válidas. A primeira usa recursos simples, já a segunda utiliza tipos genéricos para tipificar o DAO.

Se você já utiliza os recursos do tiger, utilize a solução com tipos genéricos. Caso contrário, utilize a primeira forma.

T+

F

Usamos aqui na empresa a abordagem que o jairelton mostrou e funciona muito bem!!!

Criado 2 de agosto de 2006
Ultima resposta 2 de ago. de 2006
Respostas 11
Participantes 4