rickab7:
Ola galera!
Td joia com vcs?!
Galera, estou aprendendo Padrões de Projeto…rsrss…e estou no que mais da discução “DAO”. Eu entendi o macete que o DAO traz, é muito facil para dar manutenção. Mais eu so vejo exemplos pequenos dele.
Como eu faço para usar o padrão DAO na hora de usar 2, 3, 4 Tabelas e uma relacionada com o outro?
Como eu faço as minhas busca quando tem relacionamento?
o DAO é legal na teoria, mais com os exemplos que eu vi to vendo que na pratica é dificil o uso dele.
O objectivo do DAO (Data Access Object - Objcto de Aceso a Dados) é isolar a camada superior do acesso aos dados. Ele segue o conceito de “diz-me o que queres que te traga e não como queres que procure”.
O DAO é como um garçon bem treinado.
Portanto o que vc tem que pensar é que um DAO pode fazer qq coisa por você e você não pode se preocupar com o como. Por isso um DAO é definido em duas partes. Uma interface e uma implementação.
A interface é o DAO - não se engane pensando que a implementação é o DAO, não - ela define o que vc precisa obter. Vc cria métodos como
"traz-me todos os clientes com compras feitas acima de 300000 reais"
ou "traz-me todos os produtos fora de linha"
Repare que a granulidade destas pesquisa é bem grande. Para as executar vc terá que escrever SQL mais ou menos complexo e tlv mais do que uma frase SQL. Não importa. O DAO não se preocupa com isso.
Se vc cria um DAO com granulidade fina como “traz-me todos os X que correspondam com o critério Y” vc não está fazendo um DAO e sim um intrepretador de queries. Mas tudo bem, isso é apenas um DAO com granulidade muito fina.
Independentemente da granulidade alguem tem que fazer o trabalho de trazer as coisas. Esse trabelho é da implementação do DAO.
A implementação sabe onde os dados estão e como procurar por eles.
Ela é livre de fazer qq coisa em ordem a cumprir o acordo ( a interface)
Portanto se a sua pesquisa usa 20 tabelas a implementação usara 20 tabelas. Ou seja, vc vai codificar tudo bonitinho usando SQL e JDBC e as 20 tabelas.
Claro, ninguem quer usar JDBC desta forma. Então provavelmente vc usará uma ferrramenta ORM (Que é um DAO de granuliade muito fina , aka generico de mais, que pode exeuctar via OO coisas que vc executaria via SQL ) para fazer esse tabalho real (e sujo) de procurar as coisas. Mas em certos casos o JDBC pode ser uma muito melhor alternativa caso , por exemplo, a pesquisa seja muito complexa, ou precise ser muito otimizada ou muito especifica do Banco que Vc está usado.
Enfim, todo o mundo quer na realidade uma ferramenta ORM e o DAO de alta granulidade é uma camada acima dessa onde são escritas pesquisas macro, que realmente têm muito a ver com o negocio e pouco com as tabelas. Um sistema pode ter mais do que um DAO conforme as granularidades das suas pesquisas, mas as pessoas gostam de ter apenas o de granulidade fina (aka ORM) e escrever as pesquisas contra ele.
No geral funciona, mas em particular pode não ser a solução definitiva.