it-swarm.com.de

Grundlegendes zu JSF als MVC-Framework

Ich lese gerade über JSF und bin ziemlich verwirrt, warum JSF ein MVC-Framework ist (oder zumindest, welche Teile zu welchem ​​"Buchstaben" gehören).

Ich habe mir diese Frage angesehen: Welche Komponenten sind MVC im JSF MVC-Framework?

Ich habe dort gelesen, dass, wenn Sie es nicht in einer aggregierten Ansicht betrachten, das Modell Ihre Entität ist, die Ansicht Ihr XHTML-Code ist und der Controller die verwaltete Bean ist. Hmm ... Ok, aber hängt die Ansicht nicht sehr oft davon ab, dass weitere Geschäftslogikaufrufe ausgeführt werden, die beispielsweise eine Reihe von Entitäten zurückgeben. Passt die Beschreibung noch?

Ein Buch, das ich gelesen habe, beschrieb es als Managed Beans. Es ist eine Art "Nachrichtenbringer", den das Faces-Servlet (Controller) verwendet, um die Business-Schicht (Model) aufzurufen, und dann ist der XHTML-Code die Ansicht.

Es gibt so viele Erklärungen und Unterschiede, dass ich nicht weiß, was oder wie ich es verstehen soll.

54
LuckyLuke

Ein Grund dafür, dass es in JSF und vielen anderen Web-Frameworks oft nicht ganz klar ist, welche Teile davon welchem ​​Teil von MVC entsprechen, ist, dass das MVC-Muster ursprünglich für Desktop-Anwendungen entwickelt wurde.

In einer Desktop-Anwendung sind die Knoten M, V und C ein maximal verbundener Graph, was bedeutet, dass jeder Teil mit jedem anderen Teil kommunizieren kann. Z.B. Wenn sich das Modell ändert, kann es diese Änderung in die Ansicht verschieben. Dies ist besonders sichtbar, wenn in einer Desktop-Anwendung mehrere Darstellungen der Ansicht vorhanden sind. Ändern Sie eines und sehen Sie das andere Update in Echtzeit.

Aufgrund des Client/Server- und Request/Response-Charakters von Webanwendungen ordnet die klassische MVC die meisten Web-Frameworks nicht 1: 1 zu.

In JSF sieht das Mapping folgendermaßen aus:

  • Modell - Die Services/DAOs plus die Entitäten, die sie produzieren und verbrauchen. Der Einstiegspunkt hierfür ist das verwaltete Bean, aber in Java EE, zu dem JSF gehört) werden diese Artefakte normalerweise von EJB bzw. JPA implementiert.
  • Zeigen Sie - die UI-Komponenten und ihre Zusammensetzung auf einer ganzen Seite an. Dies liegt vollständig in der Domäne von JSF und wird von JSF UIComponents bzw. Facelets implementiert.
  • Controller - Der Verkehrspolizist, der Befehle und eingehende Daten vom Benutzer verarbeitet, leitet diese an die richtigen Stellen weiter und wählt eine Ansicht zur Anzeige aus. In JSF schreibt man diesen Controller nicht, aber er wird bereits vom Framework bereitgestellt (es ist der FacesServlet).

Insbesondere der letzte Teil wird häufig nicht gut verstanden: In JSF implementieren Sie keinen Controller. Folglich ist eine Backing-Bean oder eine andere Art von Managed-Bean [~ # ~] nicht [~ # ~] der Controller.

Der erste Teil (das Modell) wird auch nicht immer klar verstanden. Geschäftslogik kann von EJB und JPA implementiert werden, aber aus Sicht von JSF ist alles, was durch eine Wertebindung referenziert wird, das Modell. Hierher stammt auch der Name einer der JSF-Lebenszyklusphasen: Update Model. In dieser Phase überträgt JSF Daten aus den UI-Komponenten in das Modell. In diesem Sinne sind verwaltete Beans (JSF) das Modell.

Obwohl JSF selbst das Konzept nicht explizit definiert, gibt es eine häufig wiederkehrende und spezifische Verwendung von verwalteten Beans, die als -Backing-Bean bezeichnet wird.

Für JSF ist ein Backing Bean immer noch das Modell, aber praktisch ist es ein Installationselement, das sich in der Mitte des Modells, der Ansicht und des Controllers befindet. Da es einige Aufgaben ausführt, die als Controller-Aufgaben angesehen werden können, wird dies oft fälschlicherweise als Controller bezeichnet. Dies ist jedoch, wie bereits erläutert, nicht korrekt. Es kann auch einige Modellaufgaben ausführen und gelegentlich auch eine Ansichtslogik ausführen.

Siehe auch:

101
Arjan Tijms

In einer minimalistischen Form ist es:

  • Modell: Alles, was Sie für die Persistenz (Ruhezustand, JPA usw.) und Datenmodellierung (Java Beans) verwenden.
  • Ansicht: xhtml, jsp, etc.
  • Controller: Verwaltete Bohnen.

JSF gibt Ihnen die Möglichkeit, Ihre Anfragen/Antworten zu kontrollieren. Die Art und Weise, wie Sie ein Modell/eine Ansicht erstellen, ist nicht direkt mit dem MVC-Framework-Konzept verbunden. Es ist nur eine Frage der Wahl. Das MVC-Konzept bezieht sich auf die Code-Organisation.

Analog ist Struts ein MVC-Framework, das jedoch hauptsächlich als Controller fungiert.

Ich glaube, ich helfe Ihnen, Ihre Idee besser zu klären.

7
axcdnt

Das Interessante an der Managed-Bean-Idee ist, dass sie sowohl als Modell (MVC-Muster) als auch als Controller ( MVC-Muster des Vermittlungscontrollers , auch als Model-View-Adapter bezeichnet) verwendet werden kann Modell und Ansicht interagieren nicht direkt.

In letzterem Fall ist der Routing-Mechanismus nicht der Controller, da die Geschäftslogik in der verwalteten Bean enthalten ist und das Modell ausschließlich ein Domänenmodell ist. Wir haben dann:

  • Modell - enthält das Domänenmodell. In den meisten Fällen handelt es sich um die Tabellen in der Datenbank, die durch DAOs beibehalten werden.

  • Ansicht - die mit der Bean verbundenen UI-Komponenten;

  • Controller - Die verwaltete Bean, die die Geschäftslogik enthält und die Kommunikation zwischen der Ansicht und dem Modell verwaltet.

Ich denke, einige Leute verwechseln die MVC des Vermittlungscontrollers mit der einfachen MVC, was zu den unterschiedlichen Erklärungen führt.

6
Tarek

Ich denke, alle Antworten hier sind richtig. Der Hauptgrund für Verwirrung liegt für mich darin, die Definitionen der MVC-Komponenten aus dem Framework (hier JSF) mit den Modell- und Steuerungskomponenten zu mischen, die Sie in Ihrem Anwendungsdesign definieren:

2
Ben