Saltar al contenido
Framework Ecosystems LabsUn contrato, muchos ecosistemas, la misma prueba.

Parte 4 — Datos: del SQL a mano al dominio limpio#

⬅️ Parte 3 · 🎓 Todas las clases · 📖 Glosario · Parte 5 ➡️

Cómo habla cada framework con la base de datos, qué te ahorra y qué te oculta hasta que duele.

Clases 51 a 65 · 15 en total · 15 construidas · 14 tecnologías en juego.

🧭 De qué va esta parte#

Quince clases sobre la frontera más discutida del oficio: entre el dominio y la base de datos.

El recorrido va del SQL escrito a mano —donde todo está a la vista y todo es responsabilidad tuya— hasta un dominio que no importa ninguna biblioteca de persistencia y se puede probar sin levantar nada. Por el camino, los dos patrones que se reparten el ecosistema —Active Record y Data Mapper—, el problema que más sistemas ha tumbado en producción —el N+1— y el momento en que conviene salir del ORM.

Aquí el elenco cambia: ya no son frameworks web, son ORM y constructores de consultas. Y la comparación gira sobre una propiedad que casi nadie nombra: si su API de consulta acepta SQL como cadena o no, porque de eso depende que la inyección sea posible o imposible por construcción.

🎒 Qué da por sabido#

🎯 Qué sabrás hacer al terminarla#

🧵 Por qué en este orden#

Las cuatro primeras son el mapa: conectar (051), SQL a mano (052) y los dos patrones que se reparten el terreno (053 y 054).

Las seis siguientes son lo que se rompe en producción: relaciones, N+1, transacciones, migraciones, semillas y el momento de salir del ORM.

Las cinco últimas son de operación y de diseño: el grupo de conexiones, la caché de lectura, lo no relacional, el repositorio y probar sin base.

📚 Las clases#

# Clase Qué resuelve Nivel Estado
051 Conectar a una base de datos Abrir una conexión y cerrarla bien. 🟢 introductorio ✅ Construida
052 SQL a mano Escribir la consulta y leer el resultado sin capa intermedia. 🟢 introductorio ✅ Construida
053 Active Record Dejar que el objeto sepa guardarse. 🟡 intermedio ✅ Construida
054 Data Mapper Separar el dominio del almacenamiento. 🟡 intermedio ✅ Construida
055 Relaciones Modelar uno a muchos y recorrerlo en los dos sentidos. 🟡 intermedio ✅ Construida
056 El problema N+1 Reconocer la consulta que se multiplica y corregirla. 🔴 avanzado ✅ Construida
057 Transacciones Agrupar operaciones para que ocurran todas o ninguna. 🟡 intermedio ✅ Construida
058 Migraciones Cambiar el esquema con historia y sin pérdida. 🟡 intermedio ✅ Construida
059 Semillas y datos de prueba Partir siempre del mismo estado conocido. 🟢 introductorio ✅ Construida
060 Cuándo salir del ORM Reconocer la consulta que el mapeador no debe generar. 🔴 avanzado ✅ Construida
061 Grupo de conexiones Entender el recurso escaso que hay detrás de cada consulta. 🔴 avanzado ✅ Construida
062 Caché de lectura Evitar la consulta repetida y aceptar el coste de la invalidación. 🔴 avanzado ✅ Construida
063 Bases no relacionales Modelar el mismo caso sin tablas y ver qué cambia. 🟡 intermedio ✅ Construida
064 Repositorio y dominio Escribir reglas de negocio que no saben que hay base de datos. 🔴 avanzado ✅ Construida
065 Probar sin base de datos Elegir entre doble, base en memoria y base real, sabiendo qué prueba cada uno. 🔴 avanzado ✅ Construida

🎬 Las tecnologías que aparecen#

Entre paréntesis, en cuántas clases de esta parte interviene cada una. Estar aquí no es una recomendación: es que el problema de esa clase existe de verdad para esa tecnología.

Ecosistema Tecnologías
Python SQLAlchemy (13), Django (1), FastAPI (1)
.NET Entity Framework Core (10), ASP.NET Core (1), Dapper (1)
JavaScript/TypeScript Prisma ORM (10), Drizzle ORM (2), TypeORM (2)
JVM Hibernate ORM (12), Spring Boot (1)
Ruby Active Record (Rails) (3)
PHP Eloquent (Laravel) (2)
Node.js Express (1)

📖 Las palabras que esta parte define#

ORM · Active Record · Data Mapper · Problema N+1 · Carga perezosa · Carga anticipada · Transacción · Migración · Semilla · Grupo de conexiones · Repositorio

Todas, con su definición, en el glosario.

✅ Cómo se ejecuta una clase de esta parte#

node scripts/run-class.mjs 051

El verificador arranca cada implementación, la somete a su contrato.json y declara cuáles omitió por no encontrar su cadena de herramientas. Si te faltan cadenas, node scripts/doctor.mjs dice cuáles y cómo se instalan.

➡️ Y después#

La parte 5 protege todo lo anterior: quién eres, qué puedes, y qué pasa cuando alguien intenta engañar al sistema.