Sto lavorando su un progetto che converte entità di database in oggetti DTO. Per farlo viene utilizzata una classe di conversione speciale per ogni conversione.Framework per la conversione di oggetti java
Sto fornendo un esempio semplificato delle cose che stiamo facendo. Ho intenzionalmente perso setter/getter e alcune altre cose per la chiarezza del codice.
Così qui sono entità persistenti:
class Car {
String number;
Driver driver;
}
class Driver {
String name;
License license;
}
class License {
String serial;
Date expired;
}
e supponendo che abbiamo bisogno di seguenti oggetti DTO:
class DriverDTO {
String name;
String carNumber;
String licenseSerial;
}
Creiamo seguenti classe convertitore:
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;
}
}
e un po 'più complessa esempio:
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;
}
}
ci vuole un sacco di tempo, quindi mi chiedo se c'è qualche quadro che può prendere il responsbility per quel lavoro. E ho solo bisogno di configurarlo con file di proprietà o annotazioni.
Smth così
Se fatta da file di proprietà:
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 esempio di possibili entità annotato
@Converted(Car.class)
class DriverDTO {
@Associated("driver.name")
String name;
@Associated("number")
String carNumber;
@Associated("driver.license.serial")
String licenseSerial;
}
Il requisito importante è che non dovrebbe usare alcuna riflessione. Tutte le annotazioni o file di proprietà devono essere compilati in fase di compilazione o precompilazione e devono essere generati bytecode o codice sorgente.
Sarò molto contento se qualcuno può indicarmi un tale quadro. Parteciperò volentieri alla sua creazione anche se è ancora in fase di sviluppo.
Thx ho dato una prima occhiata su di esso. È la cosa che volevo se non tenessimo in considerazione che usa la riflessione. Ad ogni modo segnalo la risposta come corretta. Se qualcuno può suggerire un quadro più potente, sarò lieto e cambierò la mia scelta di risposta "corretta". – Zalivaka
Durante la conoscenza di Dozer sono stato proposto con il seguente link http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-mapping. Può essere utile per qualcuno che è anche interessato a quella domanda. – Zalivaka