DAO + Interface DAO (Dúvida)

7 respostas
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?

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?

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???

jgbt

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

felipeguerra
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?

felipeguerra

Matou!

FernandoCartaxo

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

sergiotaborda

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