Donnerstag, Dezember 14, 2006

 

Data Transfer Objects (DTO) und Decorator Pattern

Angeregt von dem JSF Buch, habe ich angefangen meine Anwendungsstruktur zu überprüfen und festgestellt, dass da ein paar Sachen noch eleganter gelöst werden können. Die Entkopplung der Business-Objekte aus der Hibernate-Session fand nicht statt. Statt dessen habe lazy="false" relativ häufig verwendet und die Business-Objekte im Prinzip bis in die Presentation durchgereicht. Dass das langsam ist hatte ich schon bemerkt, aber dass das böse ist - das weiss ich jetzt auch ;-) Eleganter ist es DTOs (Data Transfer Object) zu bilden, die dann nur genau den Datenumfang in den Presentation-Layer bringen, der da auch gebraucht wird. Da DTOs von den Business-Objekten unabhängig sind kann man sie super serialisieren und über den Statemanager aufrechterhalten, ohne dass man in irgendwelche Schwierigkeiten mit bereits geschlossenen Hibernate-Sessions kommt. Diese DTOs zu erzeugen ist irgendwie recht aufwendig und es gibt verschiedene Wege das zu tun. Im Buch JSF@Work wird ein ObjectCloner beschrieben, der interessant klingt, sich aber einer weiteren Beurteilung entzieht solange der Beispielcode noch nicht online ist. Martin Fowler beschreibt in seinem Enterprise Patterns Buch eine Möglichkeit die DTOs mit speziellen Assembler-Klassen zu konstruieren. Je nach Anzahl der Ausprägungen mit Daten kann es dabei gerne auch mal mehr als eine Assembler-Klasse pro DTO geben. In den Java-Blueprints ist die Sache ebenfalls mit Assemblern angegeben. Deshalb habe ich mich jetzt erstmal für eine Test der Assembler-Nummer entschieden. In dem Buch von Martin Fowler ist das am besten erklärt, vor allem auch für den Fall, dass ein DTO geändert wird und dann das korrespondierende Business-Objekt die Änderungen übernehmen soll - soll ja vorkommen.

In dem Buch JSF@Work war ein zweiter interessanter Ansatz, nämlich das Erweitern von DTOs um UI-Funktionalitäten durch eine Aspect-Map. Momentan benutze ich das Dekorierer Pattern um die Business-Objekte um GUI-Funktionalitäten zu erweitern, was eigentlich ganz gut klappt. Ich glaube es ist nicht viel Arbeit die paar Funktionen in Aspekte umzulegen und werde es mal probieren.

Mal sehen wie's wird.

Labels: , , , ,


Comments: Kommentar veröffentlichen



<< Home

This page is powered by Blogger. Isn't yours?