Padrão de Design: Repositório | Explicação completa e simples
Tags: productivity, programming, braziliandevs
Published: 2023-05-17 18:04:10

## Introdução

Olá, meu nome é Daniela Barazarte e quero dar as boas-vindas a esta explicação completa sobre o padrão de projeto do repositório.Esta explicação será tão simples e direta que até uma criança de 5 anos conseguiria entender.

Se você preferir vídeos, aqui está um tutorial completo feito por mim no YouTube: https://www.youtube.com/watch?v=b2tPRbQJing (está em espanhol)

## <u>Teoria</u>
### Lógica
**"Padrão de design"**
- **Padrão**: é um tipo de eventos ou objetos repetitivos
![Repositório de padrões de design](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8hizh9zs3bzgaimxs1n.png)
- **Design**: atividade criativa cujo objetivo é projetar objetos úteis e estéticos

**"Repositório"**
- **Repositório**: armazém ou local onde se guardam certas coisas

### Definição simples
**Padrões de design** referem-se à ideia de que existem padrões ou soluções comuns e reutilizáveis ​​que podem ser aplicados a problemas repetitivos no design de software. Chama-se “padrão” porque se repete em vários projetos, e design porque projeta objetos de forma simples.

O **repositório** é um padrão de design de software usado para separar o aplicativo (elementos de programação, como classes, interfaces, métodos) do armazenamento de dados (banco de dados) e funciona como um mediador entre os dois.

O repositório fornece um conjunto de métodos para executar operações CRUD (Criar, Ler, Atualizar, Excluir) nos dados.

### Estrutura

![Repositório com vs sem](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/cj6dje8rbn2iq6o94rxu.png)

- A parte superior desta imagem representa um sistema sem o padrão de design do repositório
- A parte inferior desta imagem representa um sistema com o padrão de design do repositório

Como você pode ver, o padrão de design do repositório ajuda a conectar a lógica do aplicativo (de ter os métodos e funções CRUD) com o banco de dados... e quando o repositório não está lá, a conexão é direta. O fato de o repositório estar presente como um intermediário é importante e você verá o porquê neste blog.

## <u>Prática</u>
### Exercício
Você tem um aplicativo WebAPI que possui métodos para criar, ler, editar e excluir bilhetes para uma estação de trem... tenha esses bilhetes armazenados em um banco de dados SQL.

Existem dois métodos para resolver a tarefa:
1. Faça isso sem o padrão de design do repositório
2. Faça isso com o padrão de design do repositório

**<u>Método: sem o padrão de design do repositório
</u>**
![Sem padrão de design de repositório](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/j2jl76gt56z8fi36zl7o.png)



Os métodos de armazenamento do banco de dados estariam junto com os métodos de ticket (criar, ler, editar e deletar tickets).

**<u>Método: com o padrão de design do repositório</u>**
![Com padrão de design de repositório](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/en2su69434ellqthcadr.png)

Os métodos de armazenamento de banco de dados agora estão separados e não próximos aos métodos de ticket

## Importância

**O padrão de design do repositório tem vários benefícios:**

- **Separação de responsabilidades**: O padrão de projeto Repository ajuda a separar a lógica de acesso a dados da lógica de negócios do aplicativo.
- **Abstração**: O padrão de projeto Repositório fornece uma camada de abstração entre o aplicativo e o mecanismo de armazenamento de dados. Essa camada de abstração facilita a troca para um mecanismo de armazenamento de dados diferente sem afetar o código do aplicativo que usa a interface do repositório.
- **Encapsulação**: O padrão de projeto do Repositório encapsula a lógica de acesso aos dados em um só lugar, facilitando o gerenciamento e a modificação.
- **Testability**: o padrão de design Repository facilita o teste da lógica de negócios do seu aplicativo, fornecendo uma implementação de repositório simulada que pode ser usada para testes de unidade.
- **Escalabilidade**: o padrão de projeto Repository pode ajudar a melhorar a escalabilidade de um aplicativo, fornecendo um local centralizado para gerenciar o acesso aos dados, o que pode ajudar a reduzir a contenção e melhorar o desempenho.

## Gratidão

Muita obrigada por ler, se tiver alguma dúvida pode comentar, também pode me encontrar em minhas outras redes como [Twitter](https://twitter.com/elabarazarte), [GitHub](https://github .com/danielabarazarte) e [LinkedIn](https://www.linkedin.com/in/danielabarazarteg/)

Estarei preparando um post no blog sobre como implementar Repository em C# e .NET então fique ligado <3