¿Qué es un Data Transfer Object (DTO) y para qué sirve?

Contenido del Bootcamp Dirigido por: | Última modificación: 20 de septiembre de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

El Data Transfer Object es un patrón de diseño que juega un papel indispensable en la arquitectura de software, al gestionar grandes cantidades de datos entre diferentes capas o servicios. Si tienes curiosidad por saber qué es y cómo funciona un data transfer object, quédate, que aquí te lo contamos todo.

data transfer object

¿Qué es un Data Transfer Object o DTO?

Un data transfer object es un objeto simple que tiene el propósito de transportar datos entre distintas capas dentro de una aplicación, en especial entre el cliente y el servidor. Su objetivo primordial es reducir la cantidad de llamadas entre distintos componentes por medio de la agrupación de múltiples datos en un solo objeto, esto evita el envío de datos innecesarios o inclusive la sobrecarga de información que no es relevante para ciertas operaciones específicas.

Los data transfer object son bastante usuales en aplicaciones en donde existe una constante interacción con bases de datos o cuando se deben hacer integraciones con servicios externos.

¿Por qué usar un Data Transfer Object?

Como siempre, pongamos un ejemplo: simulemos que tenemos una entidad compleja en tu aplicación, por ejemplo, una clase Usuario que contiene grandes cantidades de atributos como lo son nombre, apellidos, dirección, correo, teléfono, roles de usuario, etc. Sin un data transfer object estos datos podrían enviarse al cliente de manera innecesaria, cuando quizás lo único que necesites mostrar sea el nombre y el correo de usuario. El DTO tiene la función de filtrar esos atributos de tal manera que puedas controlar la información que viaja entre el servidor y el cliente.

data transfer object
Ventajas de usar los data transfer object en Java

¿Cómo funciona un Data Transfer Object en Java?

En el universo Java, un data transfer objecto suele ser una clase Plain Old Java Object, también llamada POJO. Dicha clase no tiene ninguna lógica de negocio y actúa simplemente como un contenedor que alberga datos. Un DTO puede ser serializado, esto faciltia el envío de estos datos a través de una red.

Veamos un ejemplo:

🔴 ¿Quieres entrar de lleno al mundo DevOps & Cloud Computing? 🔴

Descubre el DevOps & Cloud Computing Full Stack Bootcamp de KeepCoding. La formación más completa del mercado y con empleabilidad garantizada

👉 Prueba gratis el Bootcamp en DevOps & Cloud Computing por una semana

Supongamos que tenemos una entidad Usuario con varios atributos:

public class Usuario {
private String nombre;
private String apellidos;
private String direccion;
private String telefono;
private String correo;
private String password;

// Getters y Setters
}

Ahora, en vez de enviar toda la información del usuario al cliente, podemos crear un DTO que solo contenga los datos que realmente necesitamos:

public class UsuarioDTO {
private String nombre;
private String correo;

// Constructor
public UsuarioDTO(String nombre, String correo) {
this.nombre = nombre;
this.correo = correo;
}

// Getters y Setters
}
  • Uso del data transfer object en un servicio: En vez de devolver la entidad completa Usuario, la cual puede contener información sensible como Password, devolvemos un objeto de tipo UsuarioDTO. Veamos:
public class UsuarioService {

public UsuarioDTO obtenerUsuarioDTO(Usuario usuario) {
return new UsuarioDTO(usuario.getNombre(), usuario.getCorreo());
}
}

Así, el Data Transfer Object permite enviar solo la información necesaria, manteniendo la seguridad de los datos que no deben exponerse.

Diferencias entre una entidad y un DTO

Podríamos pensarlo, pero una entidad y un data transfer object no son iguales. Una entidad es un objeto que usualmente se representa en una tabla en la base de datos y suele contener todos los atributos relacionados con esa tabla. Por su parte, un data transfer objecto es un objeto diseñado de manera exclusiva para la transferencia de datos y, por tanto, cabe la posibilidad de que contenga solo un subconjunto de esos atributos.

Veamos un ejemplo de cada una:

  • Entidad Usuario: Contiene todos los datos del usuario, como nombre, apellidos, dirección, teléfono, correo, password, etc.
  • UsuarioDTO: Solo contiene el nombre y el correo, que son los datos necesarios para una determinada operación.

¿Cuándo usar un Data Transfer Object?

Podemos hacer uso de un data transfer object para cuando trabajemos en una aplicación de múltiples capas en donde es necesario limitar la cantidad de datos transferidos entre servidor y cliente. Los casos en los que más ocurre son:

  1. APIs REST: Al consumir o crear APIs REST, es común que las entidades de la base de datos no se alineen perfectamente con los datos que deseas mostrar o recibir del cliente.
  2. Servicios web: Los DTOs son esenciales en servicios web para evitar enviar datos innecesarios que podrían aumentar la latencia o comprometer la seguridad de la información.
  3. Aplicaciones grandes: En proyectos grandes donde las entidades suelen ser complejas, los DTOs ayudan a reducir la sobrecarga de datos entre el servidor y el cliente.

Si te interesó este tema y quieres aprender más sobre DTO y otras temáticas sobre Java, el lenguaje de programación más popular, no olvides inscribirte en nuestro bootcamp de devops y cloud computing, en donde aprovecharás todos los conocimientos de nuestros mejores maestros para que adquieras todas las bases necesarias para incursionar en el mercado laboral rápidamente. ¡El mundo del desarrollo está esperando por ti!

Posts más leídos

¡CONVOCATORIA ABIERTA!

DevOps & Cloud Computing

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado