Patrón de diseño: Repositorio | Explicación completa y simple
Tags: designpatterns, productivity, programming
Published: 2023-05-17 17:55:32

## Introducción

Hola buenas, mi nombre es Daniela Barazarte y te quiero dar la bienvenida a esta explicación completa del patrón de diseño de repositorio, esta explicación será tan simple y directa que hasta un niño de 5 años podría entenderla.

Si prefieres los videos, aquí tienes un tutorial completo hecho por mí en YouTube: https://www.youtube.com/watch?v=b2tPRbQJing

## <u>Teoría</u>
### Lógica
**"Patrón de diseño"**
- **Patrón**: es un tipo de sucesos u objetos repetitivos
![Patrón de diseño repositorio](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8hizh9zs3bzgaimxs1n.png)
- **Diseño**: actividad creativa que tiene por fin proyectar objetos que sean útiles y estéticos

**"Repositorio"**
- **Repositorio**: almacén o lugar donde se guardan ciertas cosas

### Definición simple
Los **patrones de diseño** se refieren a la idea de que hay patrones o soluciones comunes y reutilizables que pueden aplicarse a problemas repetitivos en el diseño de software. Se le dice "patrón" porque se repite en varios proyectos, y diseño porque proyecta objetos de una manera simple

El **repositorio** es un patrón de diseño de software que se utiliza para separar la aplicación (elementos de programación, como clases, interfaces, métodos) del almacenamiento de datos (base de datos) y funciona como mediador entre ambos.

El repositorio proporciona un conjunto de métodos para realizar operaciones CRUD (Crear, Leer, Actualizar, Eliminar) en los datos.

### Estructura

![Repositorio con vs sin](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ehi00d9vfdxo2opalvyy.png)

- La parte de arriba de esta imagen representa un sistema sin el patrón de diseño de repositorio
- La parte de abajo de esta imagen representa un sistema con el patrón de diseño de repositorio

Como puedes ver, el patrón de diseño de repositorio ayuda a conectar la lógica de la aplicación (de tener los métodos y funciones CRUD) con la base de datos... y cuando el repositorio no está, la conexión es directa. El hecho de que el repositorio esté presente como intermediario es importante y estarás viendo por qué en este blog

## <u>Práctica</u>
### Ejercicio
Tienes una aplicación WebAPI que tiene métodos para crear, leer, editar y eliminar los tickets de una estación de trenes… haz que esos tickets se almacenen en una base de datos en SQL.

Hay dos métodos para resolver la tarea:
1. Hacerlo sin el patrón de diseño de repositorio
2. Hacerlo con el patrón de diseño de repositorio

**<u>Método: sin patrón de diseño repository
</u>**
![Sin patrón de diseño repository](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/de6nus2cs73b402e44ed.png)

Los métodos de almacenamiento de base de datos estarían juntos con los métodos de los tickets (creación, lectura, edición y eliminación de tickets)

**<u>Método: sin patrón de diseño repository</u>**
![Con patrón de diseño repository](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9u4cm6lc2p39y8hv4ixd.png)

Ahora, los métodos de almacenamiento de base de datos están por separado y no se encuentra junto a los métodos de tickets

## Importancia

**El patrón de diseño repositorio tiene varios beneficios:**

- **Separación de responsabilidades**: El patrón de diseño Repositorio ayuda a separar la lógica de acceso a datos de la lógica de negocio de la aplicación.
- **Abstracción**: El patrón de diseño Repositorio proporciona una capa de abstracción entre la aplicación y el mecanismo de almacenamiento de datos. Esta capa de abstracción hace que sea más fácil cambiar a un mecanismo de almacenamiento de datos diferente sin afectar el código de la aplicación que utiliza la interfaz del repositorio.
- **Encapsulamiento**: El patrón de diseño Repositorio encapsula la lógica de acceso a datos en un solo lugar, lo que hace que sea más fácil de gestionar y modificar.
- **Testabilidad**: El patrón de diseño Repositorio facilita la prueba de la lógica de negocio de la aplicación al proporcionar una implementación de repositorio simulada que se puede utilizar para las pruebas unitarias.
- **Escalabilidad**: El patrón de diseño Repositorio puede ayudar a mejorar la escalabilidad de una aplicación al proporcionar un lugar centralizado para gestionar el acceso a datos, lo que puede ayudar a reducir la contención y mejorar el rendimiento.

## Agradecimiento

Muchas gracias por leer, si tienes alguna duda puedes comentar, también me puedes encontrar en mis otras redes como [Twitter](https://twitter.com/elabarazarte), [GitHub ](https://github.com/danielabarazarte) y [LinkedIn](https://www.linkedin.com/in/danielabarazarteg/)

Estaré preparando un blog post de como implementar Repositorio en C# y .NET entonces estate atento <3