JSF und Zugriff auf Entity (was ist der bessere Weg)

Hey Leute,

ich schreibe schon viele Jahre JavaEE Anwendungen aber ich stelle mir immer wieder die Frage zur richtigen Architektur
beim Zugriff auf Entities.
Ich habe mir angewöhnt, eine Entität in einer Presentatiosschicht abzubilden… eigtl. ist das eine 1:1 Abbildung der Entität,
auf der die JSF Page zugreifen kann. Nun ist es aber so, dass Projekte allg. nicht weniger komplex werden und die Daten immer
umfangreicher, je nach Projekt.
Durch die Abbildung der Entität in eine separate Schicht, finde ich, wirkt die Software irgendwie zu aufgebläht und man hat zuviel
Code, den man warten muss.

Wie macht ihr das…? kapseln oder direkt darauf zugreifen. Evtl. gibs hier ein paar Architekten, die ihre Erfahrung mit mir teilen? :slight_smile:
Ich denke, ein Richtig oder Falsch gibt es hier nicht, oder?

viele Grüße
Steven

Einfach direkt mit detachted Entities arbeiten. Dann sparst Du Dir eine zusätzliche Schicht und das Mapping. Durch das arbeiten mit detachted Entities ersparst Du Dir auch ungewünschte Updates in der DB. JEE7 unterstützt dies out-of-the-box, wenn die UI mit CDI arbeitet und Deine Serviceschicht aus EJBs besteht.

Hey Sym,

ich denke, ich werde das zukünftig auch so machen. :slight_smile: Alles andere hat mir zuviel Overhead…
Ich danke dir :slight_smile:

im Vergleich zu not-detatched/ connected Entities? bei zusätzliche DTO-Klassen als Alternative besteht diese Gefahr ja auch nicht gerade :wink:

detached mag die zusätzlichen Klassen sparen und manche Stellen elegant lösen, ist aber das komplexe Modell,
weder in der Präsentation, noch dahinter, Serviceschicht oder was immer kommt, kann man nun sicher sein, was vorliegt, detached oder doch nicht?
wenn die Präsentationsschicht komplett ohne Session geplant ist, dann dort etwas ruhiger

gibt es Massendaten, tausend Mal Id und 5 Attribute benötigt von komplexen Entities mit 20 Attributen und Querverknüpfungen?
in DTO beliebig übertragbar, in Queries mit Teil-Konstruktoren nutzbar


DTO bieten die Möglichkeitl, mehr Methoden + Daten vereinfacht vorzuhalten, die sonst nur über verküpfte Entities in Kette abzufragen wären,
die man in den richtigen Entitäten lieber nicht haben willl

z.B. in einem selbstprogrammieren Forum zu einer Suchanfrage eine Liste von Threads/ Postings mit Zusatzinfos was darin genau gefunden/ markierter Text,
oder für Übersichten nur mit Threads die Anzahl Antworten (redundant zur Antworten-Liste) + Zusatzanzeigen wie ‚Du hast selber darin gepostet‘,

andersrum kann in den DTO auf DB-Ballast wie Annotations verzichtet werden, wobei ich persönlich davon eh abrate :wink:
ebenso manche Attribute, DB-Versionsnummer, im Forum-Beispiel Infos zum User-Passwort (Hash)


DTO-Klassen + Copy-Konstrukturen sind redundant, aber nicht zu verachten kann dieser Code abgetrennt in bestimmten packages liegen,
teils eigenen Projekten wie Common, wenn in alle Welt übertragen

dieser Code stört nicht in den wichtigen Klassen, ist meist einfach zu erweitern falls neue Attribute dazukommen usw.

um paar Code-Zeilen an wichtigen Stellen zu sparen lädt man MB-große Libraries, in diese Richtung geht das hier auch:
fast egal wieviel sekundärer Standardcode irgendwo dazu kommt, falls es den wichtigen Klassen für besseres Programmiermodell hilft, dann akzeptabel


mit detachted Entities kann man auch alles schaffen, hat aber tausend Problemen, die als Profi natürlich beherrschbar sind,
die wichtige Grenze zwischen DB-nahen kontrollieren Entities und sonstiger Programmverarbeitung ist unsichtbar (!), das könnte man als kapitalen Modell-Mangel sehen

DTO ist eine klare Trennung zwischen DB und anderem, mit Aufwand (aber auch Möglichkeiten, Erweiterungen), dafür aber sorglose strukturell garantiere Fehlerfreiheit (in bestimmter Hinsicht…, in anderer wie Vergessen von Attributen bei Copy-Konstruktor dagegen…)

(das war nun ziemlich einseitig, Gegenseite kann wer anders übernehmen :wink: )

Hehehe… oh man, nun dachte ich, ich dürfte mit dem ablassen von DTO´s faul werden. :slight_smile:
Interessant, dass ich nicht der Einzige bin, der sowas strikt zu trennen versucht…

DTO bieten die Möglichkeitl, mehr Methoden + Daten vereinfacht vorzuhalten, die sonst nur über verküpfte Entities in Kette abzufragen wären,
die man in den richtigen Entitäten lieber nicht haben willl

Das ist für mich ein wichtiger Grund, warum ich das so gerne trenne und eben auch durch abstraktion, um die IDs und sonstige sich ständig wiederholende Attribute auszulagern.

Nun gut… ich denke, man kann beide Varianten geschickt vereinen, denke ich. Nun stellt sich die Frage, ob man mischen sollte… DTO und Entitys oder sich nur für die DTO Varainte entscheiden sollte, um eine klare Linie in den Code zu bringen… Letztendlich ist dieser die Schnittstelle für uns Programmierer.

viele Grüße
Steven und danke für eure Posts :slight_smile:

Sicherlich kann es damit Probleme geben. Dies ist aber auch bei DTO und deren Mapping so. Hier kann es (Zitat) tausend Probleme geben. :slight_smile:

Ich sicherlich immer eine Frage, was man genau benötigt. Auch gegen eine Mischung zwischen detachted Entities und DTO spricht nichts in einer Enterprise-Anwendung.