Como todo mundo que bloga há anos, eu estou sem tempo e inspiração para escrever muito (dá pra ver a distância entre um post e outro), então resolvi colocar aqui algumas respostas de e-mails que recebo com questionamentos sobre artigos, posts e etc.
O primeiro segue abaixo:
fromLeandro André Zis
date Feb 23, 2007 11:15 PM
subject Artigo MVC e Camadas, Repositorio e DAOsOla Phillip,
No artigo MVC e Camadas mostra os DAOs herdando do repositorio, isto
esta correto?Leandro Zis
Oi, Leandro,
Sim, está.
Um repositório é um conceito abstrato. Ele representa o lugar onde os objetos estão guardados esperando serem utilizados por alguma operação. Os outros objetos de negócio não enxergam nada além dele, ou seja, não sabem onde os objetos são guardados de fato, num banco de dados, arquivos CSV, etc.
Um DAO (Data Access Object) é uma encarnação do padrão Data Mapper cuja responsabilidade é mapear um objeto para tabelas e vice-versa.
Desta forma o DAO pode se tornar a implementação do Repositório. Os objetos de negócios sabem apenas que podem guardar e recuperar objetos do Repositório, nada além disso. Por baixo dos panos eles estão utilizando um DAO que implementa o Repositório, cuja responsabilidade é apenas salvar e recuperar objetos do banco de dados nada além disso.
Existem casos onde os Repositórios devem ter lógica de negócio incluída. Isso não é muito comum, se for o caso vale uma revisão do design da aplicação, mas se realmente for necessário aí provavelmente você vai querer criar o Repositório como uma classe de negócios que delega as atividades de persistência para um DAO. Fazer este Repositório com regras uma classe abstrata que o DAO herda seria ruim porque numa classe (o DAO) haveria responsabilidade de negócios e persistência.
[]s
Thanks
Discordo de um ponto, Philip. DAOs não presumem mapeamento de tabelas para objetos. DAOs são simplesmente Objetos de Acesso a Dados, e não especificam a origem dos dados, o modo como serão persistidos, etc.
Essa questão de DAO implementando Repositório é mais uma questão de nomenclatura. Acho que já vimos tantos DAOs fazendo consultas com JDBC ou Hibernate que o associamos sempre a banco de dados. Mas não. DAO é uma abstração, um objeto que sabe armazenar dados e recuperá-los.
Na prática, pelo que tenho entendido DAO == Repositório.
Quase, Davi.
Realmente, DAOs nao rpecisam saber sobre *tabelas*, eles precisam saber sobre o *esquema de persistencia*. Se voce esta usando umm banco nao-relacional ele deve saber como faze ro mapeamento para salvar e obter os dados sim.
Agora nao, DAO nao é igual a um repositório. Repositório é um conceito da camada de negócios sobre o ‘lugar onde os objetos domem’, mas o DAO eh mais que isso. DAO eh um cara que sabe onde os objetos dormem e como tirar eles de la.
[...] Lendo esse artigo do Phillip, me lembrei de um problema com o padrão DAO que todos sempre fogem de discutir. Um DAO existe para abstrair o mecanismo de persistência da aplicação, simples assim. Porém é uma falsa promessa, entregue cheia de mentiras e contratos escondidos. Quando a interface do DAO é definida, implicitamente fica definida toda semântica e capacidades do mecanismo de persistência da implementação. Isso fica evidente em qualquer exemplo do padrão. [...]
Phillip,
Desenterrando esse post :p
Quando você diz que o DAO é uma encarnação do padrão Data Mapper é no sentido de que eles são a mesma coisa ou a Sun agregou alguma valor ao DAO que não temos no Data Mapper?
Estou tentando dar uma olhada na especificação do DAO só que o site da Sun aparentemente está fora do ar desde ontém.
Oi, Fabiano,
O nome DAO surgiu antes do DataMapper. Originalmente a Sun publicou o catálogo de padrões Java 2 EE com a implementação do padrão nesta plataforma, Fowler no Patterns of Enterprise Application Architecture generalizou o padrão tornando-o mais flexível e independente de plataforma.
[]s
Obrigado pela explicação.
Aproveitando gostaria de fazer um pedido.
Você bem que podia de escrever mais sobre o uso de Contratos, invariantes, pós e pré-condições na validação dos dados (campos requeridos etc) das classes do domínio.
O artigo de Contratos nulos esclareceu algumas dúvidas que tinha. Tanto que vou correr atrás da literatura que você recomendou.
Aliás fui tentar baixar os slides das novas apresentações do Wiki e fui redirecionado para o página inicial do blog.
O endereço dos arquivos está apontando para:
http://fragmental.com.br/files/presentations/erecomp2007/somos_nozes.pdf
Um abraço.
[...] http://philcalcado.com/2007/03/01/voce-pergunta-001-daos-e-repositorios/ [...]