DTO¶
Introducción¶
Un DTO (Data Transfer Object) es un patrón de diseño utilizado en el desarrollo de software para facilitar la transferencia de datos entre diferentes capas o componentes de una aplicación. Su funcionamiento se centra en tres aspectos clave:
-
Obtención de datos desde el request: Los DTOs se encargan de recibir los datos proporcionados por el cliente en solicitudes (requests), encapsulándolos de manera estructurada y clara.
-
Validación y calidad de los datos: Antes de que los datos se procesen o se almacenen, el DTO garantiza que cumplan con los requisitos de validación, como tipos de datos correctos, valores esperados, y posibles restricciones. Esto asegura la integridad y calidad de la información dentro de la aplicación.
-
Puente entre cliente y datos internos: Actúan como intermediarios entre las solicitudes del cliente y las capas internas del sistema, como la capa de lógica de negocio o la de persistencia. Esto desacopla las estructuras internas del sistema de las interacciones externas, promoviendo un diseño más flexible y mantenible.
En resumen, un DTO no solo organiza los datos entrantes, sino que también asegura que sean consistentes y cumple con el rol de conectar de manera eficiente al cliente con los procesos internos.
Cafeto usa Pydantic como librería para la creación de los DTO.
Uso¶
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Aquí se definen dos DTO, uno para la entrada de datos (Request) y otro para la salida (Response).
Nota: La clase
BaseModel
viene decafeto.models
, que hereda deBaseModel
de Pydantic, ya que se han añadido algunas funciones necesarias.
Una buena estrategia es utilizar una clase base para compartir los campos relacionados con el request
y el response
. De esta manera, las clases que hereden de ella podrán reutilizar estos campos, evitando la necesidad de definirlos varias veces.
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Es posible lograr una configuración lo suficientemente robusta como para organizar de manera más eficiente los DTOs, garantizando claridad y orden en su estructura.
Python | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
|