Estoy trabajando en un proyecto que convierta entidades de base de datos en objetos DTO. Para hacerlo, se usa una clase de convertidor especial para cada conversión.Marco para convertir objetos java
Proporciono un ejemplo simplificado de las cosas que estamos haciendo. Intencionalmente me perdí setters/getters y algunas otras cosas para la claridad del código.
Así que aquí son entidades persistentes:
class Car {
String number;
Driver driver;
}
class Driver {
String name;
License license;
}
class License {
String serial;
Date expired;
}
y suponiendo que necesitamos siguientes objetos DTO:
class DriverDTO {
String name;
String carNumber;
String licenseSerial;
}
Creamos siguientes clases convertidor:
class DriverDTOConverter {
DriverDTO convert(Car car) {
DriverDTO driverDto = new DriverDTO();
driverDto.carNumber = car.number;
driverDto.name = car.driver.name;
driverDto.licenseSerial = car.driver.license.serial;
return driverDto;
}
}
Y un poco más compleja ejemplo:
class CarDTO {
String number;
String driverName;
LicenseDTO driverLicense;
}
class LicenseDTO {
String serial;
}
class CarDTOConverter {
CarDTO convert(Car car) {
CarDTO carDto = new CarDTO();
carDto.number = car.number;
carDto.driverName = car.driver.name;
LicenseDtoConverter c = new LicenseDtoConverter();
carDto.driverLicense = c.convert(car.driver.license);
return carDto;
}
}
class LicenseDtoConverter {
LicenseDTO convert(License license) {
LicenseDTO licenseDto = new LicenseDTO();
licenseDto.serial = license.serial;
return licenseDto;
}
}
Se necesita una gran cantidad de tiempo, por lo que se preguntan si hay algún marco que puede tomar la responsbility para ese trabajo. Y solo necesitaré configurarlo con archivos de propiedades o anotaciones.
Smth así
Si hecha por archivo de propiedades:
DriverDto <--> Car {
carNumber = number;
name = driver.name;
licenseSerial = driver.license.serial;
}
CarDTO <--> Car {
number = number;
driverName = driver.name;
driverLicense = driver.license;
}
LicenseDTO <--> License {
license = license;
}
O sea posible ejemplo de entidad anotada
@Converted(Car.class)
class DriverDTO {
@Associated("driver.name")
String name;
@Associated("number")
String carNumber;
@Associated("driver.license.serial")
String licenseSerial;
}
El requisito importante es que no debe utilizar cualquier reflexión. Todas las anotaciones o archivos de propiedades se deben compilar en la etapa de compilación o precompilación, y se deben generar códigos de bytes o de código fuente.
Estaré muy contento si alguien me puede indicar un marco así. También con gusto participaré en su creación si todavía está en desarrollo.
Thx He echado un primer vistazo a él. Es lo que quería si no tomamos en consideración que utiliza la reflexión. De todos modos, marqué la respuesta como correcta. Si alguien puede sugerir un marco más poderoso, me alegraré y cambiaré mi opción de respuesta "correcta". – Zalivaka
Durante conocer a Dozer, me propusieron el siguiente enlace http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-mapping. Puede ser útil para alguien que también esté interesado en esa pregunta. – Zalivaka