DAO + Interface DAO (Dúvida)

7 respostas
F

Olá a todos,

minha dúvida é bem simples, já dei manutenção em alguns sistemas e já li também a respeito porém não consigo entender o motivo de ser ter uma interface do DAO.

no livro que li diz que é uma boa prática, mas não diz o motivo de utilizar

na aplicação fica algo do tipo:

PessoaDAOIf dao = new PessoaDAO();

não seria a mesma coisa eu deixar de usar o DAOIf (a interface)??
qual o real motivo deusar o DAOIf? no que ganho em utilizá-lo?

7 Respostas

P

a grande vantagem de se trabalhar com interfaces, independente de ser DAO ou qualquer componente/camada, é não ficar prezo a implementação. Por exemplo: imagine que a sua classe PessoaDAO seja uma implementação do bando de dados oracle, então um dia a tua empresa resolve mudar o banco para db2. Na teoria é só vc criar a classe PessoaDAODB2 e chazan… a aplicação agora acessa outro banco sem vc ter que mexer no seu código.

sacou?

F

mas no caso, eu teria que alterar todas as chamadas de PessaDAO para PessoaDAODB2, que daria no mesmo em alterar:

PessoaDAOIf dao = new PessoaDAO();

de:

PessoaDAOIf dao = new PessoaDAODB2();

para:

PessoaDAODB2 dao = new PessoaDAODB2();

não consigo ver uma real utilização da interface nesse caso:

teria um outro motivo de utilizar a interface???

J

FernandoCartaxo:
mas no caso, eu teria que alterar todas as chamadas de PessaDAO para PessoaDAODB2, que daria no mesmo em alterar:

PessoaDAOIf dao = new PessoaDAO();

de:

PessoaDAOIf dao = new PessoaDAODB2();

para:

PessoaDAODB2 dao = new PessoaDAODB2();

não consigo ver uma real utilização da interface nesse caso:

teria um outro motivo de utilizar a interface???

Sim, nesse caso vc tem razão.
Mas o que acontece é que vc não deveria usa “new” em seu codigo.
Se vc usar um mecanismo de DI ou um factory para a criação do objeto, vc vai entender melhor o beneficio.

[]´s

F
public interface IPessoaDAO {

       public void correr();
       public void nadar(long metros);

}

public class PessoaDAO implements IPessoaDAO {
  //implementa os métodos como quiser
}

public class PessoaLoucaDAO implements IPessoaDAO {
  //implementa os métodos como quiser
}

public class Teste {
   IPessoaDAO iDao = new PessoaLoucaDAO();
   IPessoaDAO iDao2 = new PessoaDAO();
}

Percebe?

F

Matou!

F

Realmente no caso de usar um factory utilizar interface é indispensável

S

FernandoCartaxo:
Olá a todos,

minha dúvida é bem simples, já dei manutenção em alguns sistemas e já li também a respeito porém não consigo entender o motivo de ser ter uma interface do DAO.

no livro que li diz que é uma boa prática, mas não diz o motivo de utilizar

na aplicação fica algo do tipo:

PessoaDAOIf dao = new PessoaDAO();

não seria a mesma coisa eu deixar de usar o DAOIf (a interface)??
qual o real motivo deusar o DAOIf? no que ganho em utilizá-lo?

O principio de encapsulamento adverte que vc não deve deixar objetos de outras classes acessarem ou terem conhecimento do que acontece dentro da classe. Para fazer isto a forma mais simples é criar uma interface e implementação separada.

Por outro lado o DAO é um serviço, ou seja, é uma classe cujo propósito fundamental é fazer algo por vc ( no caso , persistir objetos)
Mas a forma como isso pode ser conseguido não é fixa. Várias implementações são possíveis para uma mesma interface.

É por isto que o DAO é definido como uma interface e uma ou mais implementações.

ao contrário do que pode parecer usar interfaces é mais simples que usar classes.

Criado 22 de dezembro de 2008
Ultima resposta 23 de dez. de 2008
Respostas 7
Participantes 5