Ir al contenido

D — Dependency Inversion Principle

“Los módulos de alto nivel no deben depender de los módulos de bajo nivel. Ambos deben depender de abstracciones.”

Es el pegamento que une la Arquitectura Limpia. Tu lógica de negocio NUNCA debería importar directamente Prisma, Stripe o SendGrid.

import { prisma } from "@/lib/prisma";
class SincronizarPistas {
async ejecutar() {
const pistas = await prisma.pista.findMany(); // Lógica de negocio CLAVADA a Prisma
// ... lógica ...
}
}
// 1. Abstracción (en la capa de dominio)
interface RepositorioDePistas {
obtenerTodas(): Promise<Pista[]>;
}
// 2. Lógica de negocio depende de la abstracción
class SincronizarPistas {
constructor(private repositorio: RepositorioDePistas) {}
async ejecutar() {
const pistas = await this.repositorio.obtenerTodas(); // No sabe si es Prisma, JSON o mock
// ... lógica pura ...
}
}
// 3. Implementación concreta (en la capa de datos)
class PrismaRepositorioPistas implements RepositorioDePistas {
async obtenerTodas() {
return await prisma.pista.findMany();
}
}

Ahora puedes probar SincronizarPistas con un MockRepositorio que devuelve datos falsos, sin base de datos real. Y si mañana cambiáis Prisma por Drizzle, la lógica de negocio no se entera.