ERLEDIGT
NEIN
NEIN
ANTWORTEN
2
2
ZUGRIFFE
7391
7391
EMPFEHLEN
-
06.06.07 19:33 #1
Hallo!
Hat jemand von euch schon einmal ein Projekt mit Spring und Hibernate realisiert und dabei DTO (Data Transfer Object) benutzt (vielleicht mit den Pattern Assembler)?
Ich weiss nicht wo ich ansetzen soll und finde auch keine passenden Tutorials dazu.
Marco
-
08.06.07 01:29 #2
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
ja. Wobei spezielle DTO's eigentlich nur in Ausnahmefällen notwendig sind (u.U. beim Datenaustausch zwischen unterschiedlichen Schichten (Präsentationsschicht, Integrationsschicht / Geschäftslogikschicht) , beim Datenaustausch zwischen zwei (Java) Anwendungen) bzw. in manchen Architekturen komplett vernachlässigt werden können (Beispiel.: kleine JBoss Seam Webanwendung...etc.)
Manchmal bietet es sich auch an die Business Objects direkt zwischen den Schichten hin und her zuschicken je nachdem welche Anforderungen man an das Domain Model hat (Lazy Loading, Datenvolumen etc.)
Das Assembler Pattern verwendet man in der Regel so, dass man ein normales Business Object übergibt und eine spezielle "Sicht" auf dieses Business Object als ein DTO bekommt. Beispielsweise könnte es sein, dass man eine Webanwendung hat wo man in einer Liste verschiedene Daten eines Business Objects anzeigen möchte. Nun sind die
Daten die man anzeigen möchte aber nicht direkt an dem Business Object enthalten sondern man muss u.U. über mehrere Level Assoziationen traversieren.
( order.getCustomer().getAccount().getId() ). U.U. steht nun in der Präsentationsschicht nicht genügend Kontext zur Verfügung (beispielsweise könnte die entsprechende Hibernate Session an dieser Stelle nicht verfügbar sein...etc.) weshalb die Daten vorbereitet werden müssen. Dazu könnte man nun hingehen und die gewünschten Business Objects (mit allen aAsoziationen) entsprechend komplett voll initailisieren und die dann an die Präsentationsschicht übergeben. Eine andere Variante wäre hier, nur die benötigten Daten aus der Persistenzschicht anzufordern ohne die ganzen Business Objects voll initialisieren zu müssen. Man erzeugt sich also nur eine "View" auf die eigentlichen Business Objects.
Weiterhin werden DTO's auch oft noch mit zusätzlichen "dirty markers" ausgestattet. Wird ein solches DTO zu einem entfernten Client geschickt, dort manipuliert und wieder zu uns zurück gesendet, kann man anhand der dirty markers erkennen, wo, was geändert wurde.
Was sind denn deine konreten Fragen dazu?
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
08.06.07 11:41 #3
Hallo!
Ich (wir) sind gezwungen DTO's zu benutzen, da sehr unterschiedliche Präsentationsschichten implementiert werden sollen.
Mir geht es einerseits um den Zeitpunkt bzw. Ansiedlung des Transfers. Ich würde es so sehen:
Code :1
Controller <-> DTO <-> Service <-> DAO <-> Domain
Wobei im Service der Transfer mittels des Assembler-Pattern erfolgt. Oder?
Schreibe ich für jede Sichtweise eine DTO einen jeweils dafür passenden Assembler?
z.B. PersonSimpleDTO, PersonFullDTO und PersonSimpleAssembler, PersonFullAssembler
Implementiert man den Assembler so?
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
public class PersonSimpleAssembler { public PersonSimpleDTO toDTO (PersonDomain personDomain) { PersonSimpleDTO personSimpleDTO = new PersonSimpleDTO() personSimpleDTO.setFirstName(personDomain.getFirstName()); ... return personSimpleDTO; } public PersonDomain toDomain (PersonSimpleDTO personSimpleDTO) { PersonDomain personDomain = new PersonDomain() personDomain.setFirstName(personSimpleDTO.getFirstName()); ... return personDomain; } }
Das kommt mir komisch vor, wenn ich diesen Assembler so benutze:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
public class PersonService { public void updatePerson(PersonSimpleDTO personSimpleDTO) { PersonSimpleAssembler personSimpleAssembler = new PersonSimpleAssembler (); PersonDomain personDomain = personSimpleAssembler.toDomain(personSimpleDTO); PersonDomain personDomainDB = this.personDAO.findById(personDomain.getId()); personDomainDB.setFirstName(personDomain.getFirstName()); ... this.personDAO.update(personDomainDB); } }
Marco
Ähnliche Themen
-
Spring und Hibernate
Von y0dA im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 0Letzter Beitrag: 21.10.09, 14:30 -
Spring und Hibernate - Testen
Von y0dA im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 4Letzter Beitrag: 28.05.08, 19:10 -
JSF, Spring, Hibernate --> Struktur!
Von crossib im Forum Enterprise Java (JEE, J2EE, Spring & Co.)Antworten: 9Letzter Beitrag: 03.03.08, 07:15 -
LazyInitializationException bei Spring / Hibernate
Von Konstantin Denerz im Forum JavaAntworten: 16Letzter Beitrag: 05.01.08, 12:37 -
update - Hibernate, Spring
Von DerGrinsemann im Forum JavaAntworten: 1Letzter Beitrag: 31.05.07, 18:32





Zitieren

Login





