JSF 2.0 Schichten

Dennis123

Grünschnabel
Hallo,

ich arbeite gerade an einer JSF 2.0 Anwendung. Jetzt bin ich gerade am Überlegen, wie ich die Schichten am besten aufbaue. Ich habe mir das wie folgt vorgestellt:

Präsentationsschicht -> wird von *.xhtml JSF Seite verwendet (@Named, @SessionScoped,...).
Serviceschicht -> Wird von der Präsentationsschicht aufgerufen (@Inject oder @EJB) und besitzt die Geschäftslogik.
Datenschicht -> DAO (JPA, EntityManager, Entitäten).

Jetzt zu meiner Frage:

Muss eigentlich noch ein DAO für die Datenzugriffsschicht geschrieben werden, denn der EntityManager kann mit @PersistenceContext direkt in der Serviceschicht injiziert werden und die Transaktionen werden vom EE Container gehandelt.

Müssen die Entiäten bis zur Präsentationsschicht hochgereicht werden (Problem: LazyInitializationException) oder sollte die Serviceschicht doch lieber DTO's für die Präsentationsschicht liefern.

Danke für eure Hilfe.

Gruß
 

socke77

Mitglied
Das hängt stark von den Anforderungen der Applikation ab. Z.B. Verteilt oder nicht? Transaktionen oder nicht. Im Zweifel zuerst einfach halten. Z.B. wieso eigentlich EJBs?
Sehen die Anforderungen so aus, dass beispielsweise die EJBs auf mehreren Servern verteilt laufen müssen und vllt sogar die DB verteilt ist, dann solltest du nicht unbedingt Abhängigkeiten der Präsentationsschicht zur DB Schicht schaffen. Lieber loose koppeln.
Optimal ist wenn eine Schicht nur auf die unmittelbar darunterliegende Schicht zugreift.

Du machst dir schon die richtigen Gedanken, aber versuche nicht von Beginn an alles perfekt zu machen. Ohne Details zu kennen vermute ich mal das zu Beginn die Applikation auf einem Server laufen wird bzw. vllt die DB ausgelagert ist. Und wenn du in der view auf DTOs von Service <-> DB-Layer zugreifst ist das auch erst Mal ok.
 

Dennis123

Grünschnabel
Danke für die Antwort.

Die Applikation sollte ganz einfach sein. Application Server oder Tomcat auf dem die JSF Anwendung läuft und eine Datenbank. Mit dem Durchreichen der Entiäten bis zur Präsentationsschicht habe ich nämlich schon in vielden Beispielen gelsen. Mit den DTOs ist natürlich mehr Aufwand aber dafür sind die Schichten lose gekoppelt, was ich natürlich bevorzuge. Desweiteren laufe ich nicht in die Gefahr der "LazyInitializationException".