Estou dando uma estudada em DAO, e surgiu algumas dúvidas:
A DAO pode ser chamada pela classe de negócio ou apenas pela classe de controle?
Um sistema possui “vários” DAO’s ou apenas um? Digo isso pq por exemplo, para inserir dependendo da tabela é um código sql, portanto cada classe de “negócio” teria (ou quase sempre) uma classe DAO correspondente?
Eu poderia ter uma classe DAO principal por exemplo para a conexão do BD onde todas as classes “teriam acesso” ao querer se conectar ao banco, mas para fazer as inserções/exclusões/alterações cada uma teria a sua DAO??
Acho que sua pergunta deveria ser: A DAO pode ser chamada pela classe de controle ou apenas pela classe de negócio?
Eu nas aplicações que eu construo pra mim… costumo chamar de qualquer lugar que necessite… Mas o interessante é chamar de classes de serviço por questoes de organização
Vários… um para cada entidade
Sim… você utilizaria herança para isso… um DAO genérico e todos especificos herdam dele…
como o amigo já havia falado… também tenho as DAOs mas elas não são acessadas diretamente… mas sim atravéz de classes de serviço…
exemplo da estrutura que utilizo:
business - camada lógica de negócio
database - as DAOs e suas respectivas implementações
service - as classes de serviço que acessam as DAOs e as interfaces que serão extendidas e implementadas no pacote database (DAO e DAOImpl, respectivamente)
view - vizualização…
sergiotaborda
dina:
Olá pessoal!!
Tudo certo??
Estou dando uma estudada em DAO, e surgiu algumas dúvidas:
A DAO pode ser chamada pela classe de negócio ou apenas pela classe de controle?
Não sei o que vc chama de classe de negocio. Existem 3 tipos : entidades, serviços e repositorios. Repositorios servem exactamente
para encaspular a chamada ao DAO, mas serviços tb podem fazer essa chamada.
Tb não sei o que vc chama de classe de controle, suponho que seja algum tipo de action de algum framework web que substitui um servlet.
As actions podem chamar os DAOs, embora não devam. Em tese o DAO é muito baixo nivel, portanto a action deveria chamar um objeto intermédio e esse chamar o DAO. Essas classes intermédias podem ser serviços ou repositorios
Possui vários. normalmente um por entidade.
Poderia, mas não é a melhor opção. A melhor opção é ter uma classe à parte que usada para obter a conexão. Melhor ainda se ela implementar javax.sql.DataSource.
Vc deveria esquecer o DAO. Hoje em dia é um padrão histórico que não deve ser usado na prática a mesmos que vc realmente precise dele.
Hoje em dia, usar um DomainStore é mais prático sobretudo se encapsulado num Repositorio.