Architektur - Frage Spring, Manager, DTO

navino

Mitglied
Hallo zusammen,

hab mal aufgrund einer Diskussion eine Frage wie Ihr das machen würdet.
Wir haben eine Webservice-Anwendung auf Basis von Tomcat, Hibernate und Spring realisiert. Dazu einen Swing-Client, der die services benutzt.

Bei der Architekturfrage geht es nur um den Server.
Wir haben uns entscheiden Data Transfer Objekte (DTO) an den Client zurückzuliefern,
da die Objekte die in der Datenbank gespeichert werden mit Hibernate-Annotation versehen sind, und diese Typen besitzen die sich nicht über Webservices übertragen werden können.

Jetzt möchten wir das ganze noch mit RMI erweitern, und dafür benötigen wir die DTO's eingentlich nicht.

Jetzt die Fragen:

In den sogenannten Manager entwickeln wir die Business-logik.
1.Darf man über Spring einen Manager in einen anderen Manager injezieren, damit man die Logik nur an einer Stelle macht? Oder macht man sowas nicht.

2. Welche Schicht gibt die DTO-objekte zurück. Meiner Meinung nach macht das der Manager?

3.Soll man dann jetzt auch bei RMI die DTO zurückliefern ?

Gruß
navino
 
1.Darf man über Spring einen Manager in einen anderen Manager injezieren, damit man die Logik nur an einer Stelle macht? Oder macht man sowas nicht.
Meinst du mit Manager das, was landläufig als Service beschrieben wird? Dann klare Antwort: ja.

2. Welche Schicht gibt die DTO-objekte zurück. Meiner Meinung nach macht das der Manager?
Im allgemeinen gestaltet man die Serviceschicht so, dass sie zwar a) den Anforderung der verschiedenen Clients genügt, jedoch erstmal Technologieunabhängig ist. Für das jeweilige Frontend gibt es dann Exporter, die den Service "in eine bestimmte Technologie tragen". Euer Webserviceendpoint ist zum Beispiel so ein Exporter (trägt die Funktionalität über einen Webservice nach aussen), ein Spring MVC Controller wäre auf so ein Exporter (für ein Webfrontend oder eine REST Schnittstelle). Dementsprechen wirst du auch für RMI so einen Exporter nutzen. Im einfachsten Fall (wenn du Client und Server unter Kontrolle hast und beide die gleiche SChnittstellenbibliothek benutzen können) reicht es, den Service serverseitig mit einem RmiServiceExporter zu exportieren und clientseitig mit einer RmiProxyFactoryBean zu konsumieren. 10 Zeilen XML, fertig. Gern verweise ich hier auf ein wenig Beispielcode aus einem Vortrag von mir, der die Grundkonzepte recht nett aufzeigt: Remoting mit Spring (Einfach Eclipse Workspaces importieren und dem TXT File folgen)

3.Soll man dann jetzt auch bei RMI die DTO zurückliefern ?
It depends ;). Als Daumenregel hat sich eingebürgert, DTOs zu verwenden, wenn man den Client nicht unter Kontrolle hat. Was man natürlich machen könnte, ist dann eine Bibliothek für Clients anzubieten, die diese dann benutzen. Was du aber in jedem Fall machst, ist dein Domänenmodell nach aussen zu tragen. Das hat zum einen den Nachteil, dass du fachliche Informationen preisgibst und zum anderen für den Client technische Abhängigkeiten (in deinem Fall Hibernate Annotationen) implizierst. Hier ist man gut beraten, auf Standards zu setzen (JPA, und evtl dahinter Hibernate) um die Koppplung zu den Technologien möglichst gering zu halten. Die Alternative sind halt DTOs. Die machen aber IMHO eher für (REST)WebServices Sinn, da man dort eh oft sehr unterschiedliche Representationen / Views auf eine Klasse braucht, so dass sich der Overhead leichter rechtfertigt.

Gruß
Ollie
 
Zurück