image

Acesse bootcamps ilimitados e +650 cursos

50
%OFF
Article image
Sebastião Almeida
Sebastião Almeida12/09/2022 13:16
Compartilhe

Acessar dados com DAO ou Repository?

    image


     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).

    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.

    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 Baeldung 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" chamar suas camadas de persistência criadas com esses oRM`s de DAO`s. 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 (0)