domingo, 15 de septiembre de 2019

DTO - Objeto de transferencia de datos

Cuando creamos una aplicación que recibirá peticiones de un cliente, por cada dato que enviemos se realizará una llamada remota, es decir que si tenemos, por ejemplo, una tabla que contiene: código, nombre, apellidos y fecha de nacimiento de un empleado; y nuestro cliente realiza una petición para saber esos datos, se realizará una llamada dato por dato generando 4 llamadas. Para evitar ese consumo de recursos y realizar una comunicación más fluida un DTO empaqueta todos esos datos en un solo objeto reduciendo las llamadas a solo 1.

Los DTO son las clases entidad, estas se pasean por todas las capas cuando se aplica un patrón de diseño de Software como el MVC, MVP o MVVM, se asemejan a las clases en la POO, pero no poseen lógica del negocio.

Características

Teniendo como insumo una tabla de una base de datos como:


Podemos establecer que sus características son:

  • La estructura es idéntica a la de una clase del paradigma de la programación orientada a objetos (POO)
  • Debe cumplir con el encapsulamiento (sus atributos deben tener acceso private) y herencia.
  • Solo debe tener como métodos el constructor (sin parámetros) y los Setter/Getter
  • Como método de buena práctica los atributos deben tener el mismo nombre que los campos de la tabla.


Ejemplo en Java

package dto;

import java.time.LocalDate;

public class Inquilinos {
    private Integer idinquilinos;
    private String dni;
    private String nombres;
    private String paterno;
    private String materno;
    private String telefono;
    private String correo;
    private Double deuda;
    private LocalDate fecha_ingreso;
    public Inquilinos() {
    }
    public Integer getIdinquilinos() {
        return idinquilinos;
    }
    public void setIdinquilinos(Integer idinquilinos) {
        this.idinquilinos = idinquilinos;
    }
    public String getDni() {
        return dni;
    }
    public void setDni(String dni) {
        this.dni = dni;
    }
    public String getNombres() {
        return nombres;
    }
    public void setNombres(String nombres) {
        this.nombres = nombres;
    }
    public String getPaterno() {
        return paterno;
    }
    public void setPaterno(String paterno) {
        this.paterno = paterno;
    }
    public String getMaterno() {
        return materno;
    }
    public void setMaterno(String materno) {
        this.materno = materno;
    }
    public String getTelefono() {
        return telefono;
    }
    public void setTelefono(String telefono) {
        this.telefono = telefono;
    }
    public String getCorreo() {
        return correo;
    }
    public void setCorreo(String correo) {
        this.correo = correo;
    }
    public Double getDeuda() {
        return deuda;
    }
    public void setDeuda(Double deuda) {
        this.deuda = deuda;
    }
    public LocalDate getFecha_ingreso() {
        return fecha_ingreso;
    }
    public void setFecha_ingreso(LocalDate fecha_ingreso) {
        this.fecha_ingreso = fecha_ingreso;
    }
}


Beneficios

Reducción del número de llamadas remotas: mediante una sola llamada donde trae todos los datos contenidos en un solo objeto se logra reducir la cantidad de estas y aumentar la velocidad de respuesta.

Protección del funcionamiento interno del programa: al pasar los datos encapsulados se provee una mayor seguridad ante ingeniería inversa.

Obtener objetos de negocio: en ocasiones podemos encontrar que un DTO es común a muchos negocios o áreas y puede ser considerado un objeto de negocio sirviendo como plantilla para futuras implementaciones a los programadores, desarrolladores, analistas, etc.

Facilidad de pruebas. Si se aplican lenguajes de intercambio como XML o Json, mediante un DTO se puede realizar pruebas con mayor facilidad pára comprobar la integridad de los datos o el funcionamiento de la aplicación.