Patrón Repository en C#: Guía Completa

Introducción: Acceso a datos limpio

Repository abstrae el acceso a datos y centraliza consultas, evitando que la lógica de negocio conozca detalles de la base.

Facilita pruebas y cambios de infraestructura sin romper el dominio.

El objetivo no es esconder SQL a toda costa, sino ofrecer un punto de acceso coherente para las entidades del dominio.

Cuando se combina con agregados, el Repository protege invariantes y evita que la aplicación manipule directamente tablas o colecciones internas.

Repository
Prompt: Data repository icon with layers, clean minimal style.

1. Naturaleza: Biblioteca organizada

Una biblioteca ofrece un catálogo único para encontrar libros, sin importar en qué estantería estén.

Repository cumple ese rol para los datos.

El lector no necesita conocer la organización interna del depósito; solo pide por autor o título. En software, el Repository encapsula esos criterios de búsqueda.

Biblioteca
Prompt: Library catalog and shelves, soft illustration style.

2. Mundo Real: Catálogo de tienda

El catálogo expone productos sin mostrar el almacén interno.

El consumidor solicita productos a través del catálogo y no sabe cómo se almacenan.

Si la tienda cambia de proveedor o bodegas, el catálogo sigue igual. En sistemas, esto permite cambiar de ORM, base o API sin reescribir el dominio.

Catálogo
Prompt: Store catalog UI, clean flat style.

3. Implementación en C#: Código Paso a Paso

public interface IProductoRepository
{
    IEnumerable Listar();
}

public class ProductoRepository : IProductoRepository
{
    public IEnumerable Listar() => new[] { "Café", "Té" };
}

En una app real, el Repository suele trabajar con entidades del dominio y puede incluir métodos como GetById, Save o consultas específicas del agregado.

Para reportes complejos, es común usar consultas directas o proyecciones específicas en lugar de forzar todo a través del Repository.

4. Repository vs Data Mapper

Repository centraliza consultas; Data Mapper se enfoca en mapear objetos a tablas.

Se pueden combinar, pero Repository es más orientado al dominio.

Si tu principal dolor es el mapeo de tablas, Data Mapper puede ser suficiente. Si necesitas proteger el dominio y su modelo, Repository aporta más valor.

5. Diagrama UML

UML Repository
Prompt: UML diagram of Repository pattern, clean vector layout.
Flujo Repository
Prompt: Repository access flow diagram, minimal infographic style.

⚠️ Cuándo NO Usar Repository

  • Si el acceso a datos es trivial y directo.
  • Si solo necesitas consultas simples sin dominio.
  • Si el Repository termina siendo una capa que solo replica al ORM sin aportar valor.

💪 Ejercicio

Crea un repository para usuarios con métodos: GetById y Listar.

Conclusión

Repository mantiene el dominio limpio y desacoplado de la infraestructura.

Bien aplicado, mejora la testabilidad y evita que la lógica del negocio dependa de detalles de persistencia.