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?
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
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???
J
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
F
felipeguerra
publicinterfaceIPessoaDAO{publicvoidcorrer();publicvoidnadar(longmetros);}publicclassPessoaDAOimplementsIPessoaDAO{//implementa os métodos como quiser}publicclassPessoaLoucaDAOimplementsIPessoaDAO{//implementa os métodos como quiser}publicclassTeste{IPessoaDAOiDao=newPessoaLoucaDAO();IPessoaDAOiDao2=newPessoaDAO();}
Percebe?
F
felipeguerra
Matou!
F
FernandoCartaxo
Realmente no caso de usar um factory utilizar interface é indispensável
S
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.