Article image
Sebastião Almeida
Sebastião Almeida26/11/2022 20:57
Compartilhe

DDD: A diferença entre Dao e Repository

  • #JavaScript
  • #Arquitetura de Sistemas
  • #Java

Eis a questão...

No mundo da engenharia de software vejo muita confusão entre dois design patterns muito utilizados hoje em dia, o DAO e o Repository, é muito comum encontrar em fórums pela internet pessoas perguntando sobre a diferença entre os dois, outros perguntando se podem ser usados juntos e alguns afirmando que são a mesma coisa. O objetivo desse artigo é esclarecer as diferenças e semelhanças entre esses dois padrões, afim de aumentar o seu conhecimento sobre o assunto e facilitar a sua decisão de utilizar um ou outro. 

O que é o DAO

DAO é um padrão de integração que lida com a persistência de entidades

Uma entidade é a representação de algo do mundo real que possui uma existência independente. Uma entidade pode representar um objeto com uma existência física - uma pessoa, carro ou empregado - ou pode representar um objeto com existência conceitual - uma companhia, um trabalho ou um curso universitário.

O Dao tem a função de capturar e persistir os dados de um objeto(entidade) que representa um registro em uma base de dados (uma linha em uma tabela, por exemplo).


image

DAO atua na camada de infraestrutura


O que é o Repository

O Repository é um padrão de domínio que lida com a persistência de agregados

Agregado é um agrupamento de entidades relacionadas entre si, por exemplo um objeto "Compra" que possuí uma lista de objetos "Produtos" em sua composição, esse agrupamento está relacionado com o domínio da aplicação.

O domínio de uma aplicação pode ser entendido como a razão desse software existir, essa razão pos sua vez está intimamente ligada com a lógica de negócios de sua empresa.

Em outras palavras, por lidar com a agregação das entidades, o Repository tem relação com as regras de negócio do sistema.


image

Repository atua na camada de domínio (interfaces) e de infraestrutura (implementações)


Porque tanta confusão...

Porque ambos servem de abstração (camada) para persistir os dados.

O sentido de uso de camadas em um sistema so se torna claro em exemplos complexos, em exemplos simples o uso de camadas se torna redundante, por isso muitos exemplos simples de uso de repository e de Dao parecem redundantes, identidade e desnecessários.

O site Baelding declara: 

"Além disso, se tivermos um domínio anêmico, o repositório será apenas um DAO.” 

fonte: Baeldung - Dao vs Repository (traduzido do inglês)

Coisas complexas para problemas complexos...

image


É como olhar um simples Hello Word feito em uma linguagem de programação orientada a objetos, a principio vai parecer desperdício de código criar uma classe e um método dentro dessa respectiva classe para simplesmente escrever uma mensagem na tela sendo que em muitas linguagens isso pode ser feito com uma simples chamada de função, porém somente quando vemos exemplos mais complexos da utilização do paradigma OO é que conseguimos ver sua real utilidade.

Em Resumo: Soluções para problemas complexos só vão fazer sentido em casos que essa complexidade realmente existe, não tente explicar DDD ou OO com um simples Hello Word ou poucas linhas de código porque isso só vai servir para gerar mais confusão. 

Considerações finais

Além de tudo o que e foi dito anteriormente, podemos considerar que o DAO fica em uma camada mais baixa do sistema e portanto conhece detalhes de infraestrutura do sistema enquanto o Repository por ficar em uma camada mais acima do sistema, não conhece detalhes de infraestrutura. Em alguns casos o Repository chega a utilizar o DAO para persistir os dados, com o surgimento de muitos frameworks ORM, a utilização do DAO pelo Repository caiu em desuso, embora existam muitos desenvolvedores que "erroneamente" chamam suas camadas de persistência criadas com esses ORM`s de DAO`s. 

Para título de exemplo, no site da Microsoft encontramos um diagrama com uma descrição das camadas do DDD e suas funções, nessa imagem podemos observar o uso de ORM's pela camada Repository, esses ORM's mostrados no diagrama poderiam também ser substituídos por DAO's.


image

Fonte: Microsoft

  

Seja DAO ou Repository o importante é manter a organização de seu código a fim facilitar a adição de features e a manutenção.

Compartilhe
Comentários (1)
Reginaldo Santana
Reginaldo Santana - 27/11/2022 20:55

Show. Parabéns pelo artigo