DTO PATTERN EN LARAVEL: LA MEJOR PRÁCTICA PARA TRANSFERIR DATOS DE FORMA LIMPIA Y SEGURA

Un DTO (Data Transfer Object) es un objeto simple cuya única responsabilidad es transportar datos entre diferentes capas de la aplicación, por ejemplo, desde el Controller hasta el Service Layer o Repository. A diferencia de los modelos de Eloquent, un DTO no contiene lógica de negocio ni métodos para interactuar con la base de datos. Su propósito es ser un contenedor limpio y estructurado de información.

Ejemplo práctico de un DTO en Laravel

// app/DTOs/UserDTO.php

class UserDTO
{
    public function __construct(
        public readonly string $name,
        public readonly string $email,
        // puedes agregar más propiedades según necesites
    ) {}
}

//Uso en el controlador:
$userDTO = new UserDTO(
    name: $request->name,
    email: $request->email
);

$userService->createUser($userDTO);
De esta forma, los datos entran limpios y salen limpios. El Service Layer recibe un objeto con estructura clara y tipos definidos.

Beneficios de usar DTOs

  • Código limpio y estructurado: Los datos están organizados y son fáciles de entender.
  • Type Safety: Gracias a las propiedades tipadas y al constructor, reduces errores.
  • Mejor mantenibilidad: Si cambias la estructura de los datos, solo lo haces en un único lugar.
  • Mayor legibilidad: El código se vuelve autoexplicativo.
  • Mejor integración con Service Layers y arquitecturas limpias.
  • Menos bugs: Al tener una estructura rígida, es más difícil introducir errores.

¿Cuándo se debería usar DTOs?

Usa DTOs cuando:
  • Los datos se pasan entre múltiples capas (Controller → Service → Repository).
  • La lógica de negocio está creciendo.
  • Varias acciones usan los mismos datos.
  • Quieres mantener un código limpio, predecible y escalable.
Cuándo NO usar DTOs
  • En aplicaciones muy pequeñas o prototipos./li>
  • En CRUDs extremadamente simples donde el overhead no vale la pena./li>
  • Cuando agregar un DTO supone más código del necesario.