Frage

Ich habe ähnliche Fragen und sorgen, wie das konvertieren zwischen Hibernate-Entitäten und Daten transfer Objekte zurückgegeben werden, die von einem web-service, wie diskutiert in dieser Frage:

Ist die Verwendung von data transfer objects in ejb3 als best-practice -

Einer der Faktoren, der hier erwähnt ist, ist, dass, wenn der domain-Modell ändert sich, ein set von DTOs schützen die Verbraucher im Falle eines web-service.

Obwohl es scheint, wie es wird hinzufügen eine erhebliche Menge an code, um mein Projekt, diese Argumentation scheint sound.

Gibt es ein gutes design-Muster, das ich verwenden können, zu konvertieren, ein Hibernate entity (, die eine Schnittstelle implementiert), um ein DTO, die die gleiche Schnittstelle?

Vorausgesetzt, die beiden folgenden implementieren von 'Buch', ich würde konvertieren müssen ein BookEntity.class zu einem BookDTO.class so kann ich lassen Sie JAXB serialisieren und zurück.

Wieder, diese ganze Aussicht scheint auf mich unseriös, aber wenn es gute Muster für helfen zu deal mit diesem Umbau würde ich gerne einen kleinen Einblick.

Ist es vielleicht einige interessanten Weg, um zu konvertieren, die über Reflexion?Oder ein "generator" - Muster, dass ich nicht an Sie denken?

Soll ich das einfach ignorieren Sie den DTO-Muster und pass-Einrichtungen rund?

War es hilfreich?

Lösung

Sollte ich einfach das DTO -Muster ignorieren und Einheiten umgeben?

Meine Präferenz ist normalerweise "Ja". Ich mag die Idee paralleler Hierarchien nicht, die nur aus architektonischer oder schichtreinheit erstellt wurden.

Der ursprüngliche Grund für das DTO -Muster war eine übermäßige Verbindung in EJB 1.0- und 2.0 -Apps beim Übergeben von Entität EJBs an die View -Stufe. Die Lösung bestand darin, den Staat der Entitätsbean in einen DTO zu bringen.

Ein weiterer Grund, der normalerweise zum Erstellen von DTOs angegeben wird, besteht darin, die Modifikation durch die Ansichtsschicht zu verbieten. DTOs sind in diesem Fall unveränderliche Objekte ohne Verhalten. Sie tun nur Daten zur Ansichtsschicht.

Ich würde argumentieren, dass DTO ein Kern-J2EE-Muster ist, das zu einem Anti-Muster geworden ist.

Mir ist klar, dass einige Leute nicht zustimmen würden. Ich biete einfach meine Meinung an. Es ist nicht der einzige Weg, es zu tun, noch die "richtige" Art. Es ist meine Präferenz.

Andere Tipps

Es muss eine konträre Sicht unter allen jolly treten von der DTO.

tl;dr - manchmal ist Es immer noch nützlich.

Der Vorteil der DTO ist, dass Sie nicht haben, um eine Unmenge von Anmerkungen, um Ihre domain-Klassen.

Sie beginnen mit @Entity.Nicht so schlimm.Aber dann müssen Sie JAXB so fügen Sie @XMLElement etc - und dann müssen Sie die JSON, so dass Sie Dinge wie @JsonManagedReference für Jackson zu tun, der rechten Sache mit Beziehungen, die Sie dann hinzufügen, etc.etc.etc.ad infinitum.

Ziemlich bald wird Ihr POJO ain ' T so plain jede mehr.Lesen Sie mehr über "domain driven design" irgendwann.

Darüber hinaus können Sie "filter" einige Eigenschaften, die Sie nicht wollen, dass die Ansicht darüber wissen.

Wir sollten nicht vergessen, dass Entitätsobjekte nicht einfach zu handhaben sind, wenn sie im verwalteten Zustand sind. Dies macht ihren Übergang an GUI -Formen problematisch. Genauer gesagt werden Kinderobjekte eifrig behandelt. Dies kann nicht außerhalb der Sitzung, Couning -Ausnahmen. Sie müssen also entweder vom Entity -Manager von ihnen in geeignete DTOs umgewandelt werden. Wenn ich nicht von Cource ist, gibt es ein Muster, das mir nicht bekannt ist, dass ich mich sehr freuen würde zu wissen.

Zum schnellen Erstellen eines "Look-Alike" -DTO ohne eine Reihe doppelter Get/Set-Code können Sie verwenden Beanutils.CopyProperties. Diese Funktion hilft Ihnen dabei, die Daten von DAO nach DTO -Klasse schnell zu kopieren. Denken Sie daran, dass mehr als eine gemeinsame Bibliotheken Beanutils.CopyProperties unterstützen, aber ihre Syntax ist nicht gleich.

Ich weiß, dass dies eine alte Frage ist, aber ich dachte, ich würde eine Antwort hinzufügen, die einen Rahmen anbietet, um zu helfen, falls jemand anderes dieses Problem angeht.

Unser Projekt hat JAXB -kommentierte Pojos, die vom JPA -kommentierten Pojos getrennt sind. Unser Team diskutierte darüber, wie Daten zwischen den beiden Objekten (tatsächlich Datenstrukturen) am besten verschoben werden können.

Hier ist eine Option für die Menschen zu berücksichtigen:

Wir haben gefunden und experimentieren mit Dozer welches (1) gleichname, (2) XML -Mapping und (3) benutzerdefinierte Konvertierungen als Möglichkeit zum Kopieren von Daten zwischen zwei Pojos.

Es war bisher sehr einfach zu bedienen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top