En el desarrollo de aplicaciones, es fundamental mantener nuestro código organizado y fácil de mantener. Una de las mejores prácticas para lograr esto es utilizar DTOs (Data Transfer Objects), que nos permiten separar la lógica de validación y transformación de datos.
¿Qué es un DTO? Es un objeto que transporta datos entre procesos. Su propósito es estructurar los datos de entrada y salida, permitiendo una mayor claridad y flexibilidad en las operaciones de tu aplicación.
Ejemplo práctico en PHP:
DTO de Entrada
class UserCreationInputDTO
{
public function __construct(
public string $userName,
public string $userEmail,
public string $rolName,
public string $inscriptionCourse
) {}
public function toArray(): array
{
return [
'user' => ['name' => $this->userName, 'email' => $this->userEmail],
'rol' => ['name' => $this->rolName],
'inscription' => ['course' => $this->inscriptionCourse],
];
}
}
DTO de Salida
class UserCreationOutputDTO
{
public function __construct(
public int $userId,
public int $rolId,
public int $inscriptionId
) {}
public function toArray(): array
{
return [
'user_id' => $this->userId,
'rol_id' => $this->rolId,
'inscription_id' => $this->inscriptionId,
];
}
}
Flujo de Uso:
- Validación → Devuelve un Input DTO.
- Servicio → Utiliza los DTOs para procesar los datos y crear las entidades.
- Controller → Orquesta el proceso, asegurando que los datos estén validados, transformados y listos para ser utilizados.
Organización de los DTOs
Es recomendable tener una estructura dedicada para tus DTOs, como la siguiente:
app/ ├── Controllers/ ├── DTOs/ │ ├── Input/ │ │ └── UserCreationInputDTO.php │ ├── Output/ │ │ └── UserCreationOutputDTO.php ├── Services/ ├── Models/
Ventajas de usar DTOs:
- Claridad y estructura: Separar la lógica de validación y los datos hace que tu código sea más limpio y fácil de mantener.
- Flexibilidad: Permite agregar más transformaciones o validaciones sin alterar las entidades del modelo.
- Escalabilidad: Facilita el manejo de nuevas funcionalidades, como la creación de nuevos endpoints o la modificación de la estructura de datos.
Implementar esta técnica es un paso hacia un código más robusto y fácil de escalar. 💡
#PHP #Laravel #CleanCode #SoftwareArchitecture #DTO