Ich arbeite an einem Projekt, das Datenbankobjekte in DTO-Objekte konvertiert. Dazu wird für jede Konvertierung eine spezielle Konverterklasse verwendet.Framework zum Konvertieren von Java-Objekten
Ich bin ein vereinfachtes Beispiel für die Dinge, die wir tun. Ich habe absichtlich Setter/Getter und einige andere Dinge für Code Klarheit verpasst.
sind also hier persistenten Entitäten:
class Car {
String number;
Driver driver;
}
class Driver {
String name;
License license;
}
class License {
String serial;
Date expired;
}
Und davon aus, dass wir benötigen folgende DTO-Objekt:
class DriverDTO {
String name;
String carNumber;
String licenseSerial;
}
Wir folgenden Konverter-Klasse erstellen:
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;
}
}
Und ein bisschen komplexer Beispiel:
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;
}
}
es viel Zeit in Anspruch nimmt, so dass ich frage mich, ob jeder Rahmen ist, die die responsbility für diese Arbeit übernehmen kann. Und ich muss es nur mit Property-Dateien oder Annotationen konfigurieren.
Smth wie die
gemacht Wenn durch Eigenschaftsdatei:
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;
}
Oder Beispiel für mögliche kommentierten Einheit
@Converted(Car.class)
class DriverDTO {
@Associated("driver.name")
String name;
@Associated("number")
String carNumber;
@Associated("driver.license.serial")
String licenseSerial;
}
Die wichtige Voraussetzung ist, dass es keine Reflexion verwendet werden soll. Alle Annotationen oder Property-Dateien sollten kompiliert oder vorkompiliert werden, Stufe und Bytecode oder Quellcode sollte generiert werden.
Ich werde mich sehr freuen, wenn mich jemand auf solch ein Framework hinweisen kann. Ich werde auch gerne an seiner Gründung teilnehmen, wenn es noch in Entwicklung ist.
Thx Ich habe einen ersten Blick darauf genommen. Es ist das, was ich wollte, wenn wir nicht berücksichtigen, dass es Reflexion verwendet. Jedenfalls markiere ich die Antwort als richtig. Wenn jemand einen leistungsfähigeren Rahmen vorschlägt, werde ich froh sein und meine "richtige" Antwortwahl ändern. – Zalivaka
Beim Kennenlernen von Dozer wurde ich mit folgendem Link vorgeschlagen: http://stackoverflow.com/questions/1432764/any-tool-for-java-object-to-object-mapping. Es kann hilfreich sein für jemanden, der sich auch für diese Frage interessiert. – Zalivaka