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 ... }}✅ Bien (Inversión de Dependencias)
Sección titulada «✅ Bien (Inversión de Dependencias)»// 1. Abstracción (en la capa de dominio)interface RepositorioDePistas { obtenerTodas(): Promise<Pista[]>;}
// 2. Lógica de negocio depende de la abstracciónclass 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(); }}🪄 La magia
Sección titulada «🪄 La magia»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.