El patrón Mapper, a menudo implementado como un objeto que mapea un conjunto de datos a otro, se usa para transferir datos entre objetos que no comparten la misma estructura interna, o entre una capa de presentación y una capa de lógica de negocio, o incluso entre la lógica de negocio y una base de datos.
El objetivo es abstraer y encapsular la lógica necesaria para transformar los datos de una representación a otra, haciendo que el proceso de intercambio de datos sea más flexible y fácil de mantener.
Este patrón es especialmente útil en situaciones donde:
Consideremos un ejemplo simple donde tenemos un objeto de dominio Persona y un objeto de transferencia de datos (DTO – Data Transfer Object) PersonaDTO, y queremos mapear los datos entre estos dos objetos:
public class Persona {
private String nombre;
private int edad;
// Constructor, getters y setters
}
public class PersonaDTO {
private String nombreCompleto;
private int edad;
// Constructor, getters y setters
}
public class PersonaMapper {
public static PersonaDTO toDTO(Persona persona) {
return new PersonaDTO(persona.getNombre(), persona.getEdad());
}
public static Persona fromDTO(PersonaDTO personaDTO) {
String[] nombres = personaDTO.getNombreCompleto().split(" ");
String nombre = nombres[0]; // Simplificación para el ejemplo
return new Persona(nombre, personaDTO.getEdad());
}
}
El patrón Mapper juega un rol crucial en el diseño actual, facilitando la integración y la comunicación entre distintas capas o sistemas, con una forma clara de “traducir” los datos entre diferentes representaciones, eliminando las barreras entre diferentes estructuras de datos, promoviendo un diseño de software más limpio, modular y escalable.