
¿Confundes DTOs con Modelos de Infraestructura?
En el ecosistema de Domain-Driven Design (DDD), entender la responsabilidad de cada objeto de datos es vital. Aunque un DTO y un objeto de Infraestructura puedan verse casi idénticos visualmente, sus propósitos y comportamientos son mundos aparte.
Confundirlos es el primer paso hacia un código acoplado y difícil de mantener. Aquí te explico las diferencias clave:
Infraestructura (Modelos de Datos/Entidades de Persistencia)
La capa de infraestructura se encarga de cómo se almacenan o recuperan los datos (por ejemplo, en una base de datos o un servicio externo).
-
Contrato de Almacenamiento: Define la forma exacta en que los datos viven en el "mundo exterior".
-
Manipulación y Transformación: Aquí es donde ocurre la magia. Puedes mapear subestructuras, transformar formatos (como pasar un string a UpperCase()) o gestionar relaciones complejas entre tablas.
-
Composición: Es común que estas estructuras contengan otras subestructuras o colecciones anidadas para representar la integridad de los datos.
DTO (Data Transfer Object)
Como su nombre indica, su único rol es transportar datos entre procesos o capas (por ejemplo, de tu API al frontend).
-
Contrato de Comunicación: Define qué datos va a recibir o enviar tu sistema. Es la "frontera".
-
Inmutabilidad y Simplicidad: Un DTO debe ser plano y sencillo. Su función no es validar lógica de negocio compleja ni transformar datos; su función es ser un contenedor eficiente.
-
Dato vs. Manipulación: El DTO define los datos que se transportan; la Infraestructura define los datos que se manipulan o persisten.

💡 El ejemplo clave:
Imagina una API:
-
El DTO recibe el JSON del cliente y asegura que los campos obligatorios estén ahí.
-
El sistema convierte ese DTO en un objeto de Dominio/Infraestructura.
-
En esta fase es donde realizas filtros, mapeos o agregas subestructuras antes de guardar en la base de datos.
En resumen: Si vas a transformar, filtrar o anidar lógica de persistencia, estás hablando de Infraestructura. Si solo estás moviendo datos de un punto A a un punto B, usa un DTO.