Entwickler-Ecke

Verteilte Systeme - Partielle Übertragung von Objektzuständen


exemadorleos - So 10.12.17 18:29
Titel: Partielle Übertragung von Objektzuständen
Hallo,

beim Design stellt sich mir immer wieder die Frage, wie ich Objektzustände korrekt über REST anbiete, d.h. in meiner serverseitigen Implementierung.

Im Detail:
Ich möchte aktuell in einem Projekt ein json-Array zurückgeben, dass von jedem Objekt 2-3 Eigenschaften abbildet. Diese habe ich in ein POJO (Plain Old Java Object) gekapselt - die Serialisierung klappt und die Serverantwort ist wie erwartet. Nach meinem Verständnis habe ich hier das DataTransferObject-Pattern (DTO) angewendet. Meine Frage bezieht sich nun auf die Implementierung des DTO. Tatsächlich hat der Server wesentlich mehr Informationen als das DTO für diesen Anwendungszweck (REST-call) abbildet.

Hat Jemand Erfahrungen?
1.) Ist es wirklich sinnvoll, das erforderliche DTO bei jedem REST-call im tatsächlichen Arbeits-Objekt zu erstellen?
2.) Oder leitet man das interne Serverobjekt vom POJO=DTO ab und castet dann beim REST-call das interne Arbeitsobjekt vor der Serialisierung auf Ebene des DTO?
3.) Oder hält man eine jeweils aktuelle Instanz des DTO innerhalb des Arbeitsobjektes vor? Dann wären die Daten alle mehrfach im Speicher?!?


Ralf Jansen - So 10.12.17 21:35

Zitat:
1.) Ist es wirklich sinnvoll, das erforderliche DTO bei jedem REST-call im tatsächlichen Arbeits-Objekt zu erstellen?

Das wäre zumindest üblich. Ist aber konkret nicht mit ja oder nein zu beantworten. Kommt halt auf den gesamten Kontext an ob das bei dir Sinn macht oder nicht.
Zitat:
2.) Oder leitet man das interne Serverobjekt vom POJO=DTO ab und castet dann beim REST-call das interne Arbeitsobjekt vor der Serialisierung auf Ebene des DTO?

Cast klingt so als würdest du versuchen die Datenmodelle die du für verschiedene Zwecke hast von aneinander ableiten zu wollen. Das ist üblicherweise eine schlechte Idee. Wenn du mehrere Abstraktionsebenen hast (mehrere Schichten mit eigenen Datenmodellen) dann halte diese Modelle unabhängig voneinander und versuche zwischen den Modellen zu mappen(man könnte sich auf den Standpunkt stellen das genau das die Aufgabe einer Schicht ist. Zwischen einem Input und einem Output Datenmodell zu mappen und dabei die Regeln der Schicht anzuwenden). Das ist üblicherweise problemloser als Vererbung.
Zitat:
3.) Oder hält man eine jeweils aktuelle Instanz des DTO innerhalb des Arbeitsobjektes vor? Dann wären die Daten alle mehrfach im Speicher?!?

Caching von Daten wäre eine mögliche Optimierung eines Systems. Sollte man aber auch nur tun wenn man die Optimierung braucht. Bei deiner Frage klingt auch gleich eins der primären Probleme beim caching durch. Woher weißt du ob die Daten die du da vorhalten willst aktuell sind? Über solche Optimierungen sollte du dann nachdenken dann wenn du genau weißt wo die Performanceengpässe liegen. Vorher verbrennst du nur unnötig Resourcen.


exemadorleos - Mo 11.12.17 20:54

Hallo Ralf, Danke für die klare Antwort! Nach Ressourcenverbrennung fühlt es sich auch an :-) Ich werde die DTOs also bei Bedarf erzeugen. Performancemäßig hab ich da noch keine Probleme. Danke nochmal!