Introducción: Mapeo limpio
Data Mapper traduce entre objetos de dominio y BD. No mezcles SQL en lógica. Mapper aísla. Dominio no sabe SQL. Mapper sabe SQL, traduce queries a objetos. Ventaja: dominio limpio, test fácil. Desventaja: boilerplate. ORM (EF Core) es Data Mapper. Sin ORM, implementa manualmente. Usa cuando perf crítica. Usa ORM cuando dev speed importa.

Prompt: Data mapper translating between objects and tables, clean minimal style.
1. Naturaleza: Traductores
Un traductor convierte un idioma en otro sin alterar el contenido.
El Data Mapper traduce entre el lenguaje del dominio y el de la base.

Prompt: Translator bridging two languages, soft illustration.
2. Mundo Real: Integración de sistemas
Una empresa integra sistemas legacy con un modelo moderno.
El mapper adapta estructuras antiguas sin contaminar el dominio.

Prompt: System integration mapping diagram, clean flat style.
3. Implementación en C#: Código Paso a Paso
public class ProductoMapper
{
public Producto FromRow(DbRow row) => new Producto(row.Id, row.Nombre);
public DbRow ToRow(Producto p) => new DbRow(p.Id, p.Nombre);
}
El mapper se ubica en la infraestructura, no en el dominio.
Combina con Repository para consultas y persistencia coherentes.
4. Data Mapper vs Active Record
Active Record mezcla dominio y persistencia. Data Mapper los separa.
Si tu dominio es simple, Active Record puede bastar. Si es complejo, Data Mapper es más limpio.
5. Diagrama UML

Prompt: UML diagram of data mapper, clean vector layout.

Prompt: Data mapper flow diagram, minimal infographic style.
⚠️ Cuándo NO Usar Data Mapper
- Si el dominio es simple y CRUD directo es suficiente.
- Si el equipo no necesita separar persistencia y modelo.
- Si el costo de mantenimiento supera el beneficio.
💪 Ejercicio
Crea un mapper para convertir entre una fila de base y un objeto de dominio.
Conclusión
Data Mapper mantiene el dominio limpio y desacoplado de la base.
Es un patrón clave cuando el modelo de negocio es complejo y evoluciona con frecuencia.