Desde La Capa De Dominio
← Volver al blog

Repository Pattern: deja de acoplar tu dominio a la base de datos

El Repository Pattern es la herramienta que te permite diseñar el dominio primero y postergar la decisión de infraestructura. Implementación real en Code Finances con TypeORM.

Repository Pattern DDD Clean Architecture SOLID Code Finances TypeScript

Volviendo con la serie de Code Finances, hoy tocamos una de las decisiones más importantes — y muchas veces mal tomadas — en desarrollo de software: elegir primero la base de datos.

Sí, esa típica pregunta al empezar un proyecto:

"¿Usamos MongoDB o PostgreSQL?"

❌ Error.


💡 Cambiemos la pregunta


¿Y si diseñamos primero el dominio? ¿Y si pudiéramos acceder a datos sin depender de una tecnología concreta?

Aquí es donde entra el Repository Pattern.


🔍 ¿Qué es el Repository Pattern?


Es un patrón que nos permite encapsular la lógica de persistencia y desacoplar el dominio de la infraestructura. Tu dominio no sabe si usas SQL, NoSQL o cualquier otra cosa.


📐 Cumpliendo SOLID de forma natural



🛠️ Implementación en Code Finances


📦 Dominio — la abstracción

interface LiquidityCategoryRepository {
  save(category: LiquidityCategory): Promise<void>
}

⚙️ Aplicación — el caso de uso depende de la interfaz

class LiquidityCategoryCreator {
  constructor(private repository: LiquidityCategoryRepository) {}

  async execute(category: LiquidityCategory) {
    await this.repository.save(category)
  }
}

🏗️ Infraestructura — la implementación concreta

class TypeOrmLiquidityCategoryRepository implements LiquidityCategoryRepository {
  async save(category: LiquidityCategory): Promise<void> {
    // lógica con TypeORM
  }
}
flowchart TB
    subgraph Aplicacion[Aplicación]
        UC["LiquidityCategoryCreator<br/>caso de uso"]
    end

    subgraph Dominio
        I["LiquidityCategoryRepository<br/>interfaz"]
    end

    UC -->|depende de| I

    subgraph Infraestructura
        direction TB
        IMPL["TypeOrmLiquidityCategory<br/>Repository"]
        DB[("PostgreSQL<br/>TypeORM")]
        IMPL --> DB
    end

    subgraph Tests
        MOCK["InMemoryRepository<br/>mock"]
    end

    I -.->|implementa| IMPL
    I -.->|implementa| MOCK

    style Dominio fill:#1e1b4b,stroke:#818cf8,color:#e0e7ff
    style Aplicacion fill:#0f172a,stroke:#818cf8,color:#e0e7ff
    style Infraestructura fill:#0f172a,stroke:#818cf8,color:#e0e7ff
    style Tests fill:#1e3a1e,stroke:#4ade80,color:#dcfce7

🔄 ¿Qué conseguimos?



⚠️ El error común


❌ Enfoque típico

  1. Eliges base de datos
  2. Diseñas tablas
  3. Adaptas el dominio a eso

→ Dominio acoplado, difícil de cambiar, código rígido.

✅ Enfoque correcto

  1. Diseñas el dominio
  2. Defines repositorios (interfaces)
  3. Implementas la infraestructura después

→ La base de datos es un detalle. El dominio es lo importante.


💬 Conclusión


El Repository Pattern no es solo un patrón más. Es una herramienta que te permite diseñar mejor, cambiar sin romper y mantener tu dominio limpio.

Porque al final: la base de datos es un detalle. El dominio es lo importante.


Publicado originalmente en LinkedIn.