JSF und MVVM?

Hey,

ich glaube, dass wenn man mit JSF und Beans arbeitet das MVVM Pattern direkt oder indirekt angewendet. Allerdings bin ich mir dabei nicht ganz sicher wegen https://stackoverflow.com/questions/19925405/is-mvvm-design-pattern-supported-by-jsf

Wir haben ja bei einer JSF Applikation:

  • View (*.xhtml)
  • ViewModel (Bean)
  • Model (DomainModel)

In der View haben wir die ganzen UI Geschichten und im Bean Dinge wie, Daten für die UI Aufbereiten (Service Calls) und dahinter ist dann das Model.

Wenn man das MVVM Pattern sauber umsetzt, mit Interfaces und DI arbeitet, sollte es meiner Meinung sogar möglich sein, den Bean hinter eine JavaFX View zu legen.

Ein heikles Thema? :smile:

Was ist denn deine Frage?

Die Frage wäre, ob es richtig ist zu sagen, dass beim Einsatz von JSF und Beans das MVVM Pattern zum Einsatz kommt (oder ob das kompletter Unsinn ist)? Auf SO wird ja gegenteiliges behauptet. Oder kann man da sagen, das ist auslegungssache?

[EDIT] Wenn nicht das MVVM Patter bei JSF angewandt wird -welches dann?

Ich würde JSF eindeutig dem MVP Pattern zuordnen, eine gute Begründung gibt hier BalusC:

MVVM is mainly a desktop application oriented pattern. When considering MVVM in web application perspective, there would be a controller in the client side. JSF doesn’t have such one. When still speaking about web applications, if you were using e.g. Spring MVC in server side with e.g. AngularJS or Node.js in client side, you may speak about MVVM

Ok, genau diesem Absatz hätte ich widersprochen bzw. halte ich nicht für richtig. Ich sehe ein Pattern als einen Abstrakten Lösungsansatz, den ich unabhängig von Technologie und Client bzw. Server anwenden kann.

View: Alle durch die grafische Benutzeroberfläche (GUI) angezeigten Elemente. Es bindet sich an Eigenschaften des ViewModel…

Das wäre quasi unsere jsf bzw. xhtml View.

ViewModel: Enthält die UI-Logik (Model der View) und dient als Bindeglied zwischen View und obigem Model. Einerseits tauscht es Information mit dem Model aus, ruft also Methoden oder Dienste auf …

Genau das macht eigentlich der Bean. Er macht die Servicecalls und stellt die Daten bereit.

Model: Datenzugriffsschicht für die Inhalte, die dem Benutzer angezeigt und von ihm manipuliert werden.

Auch hier hätte ich kein Widerspruch gesehen.

Es kommt halt natürlich auch drauf an aus welcher Perspektive man das Ganze betrachtet. Aber per se, hätte ich hier keinen Verstoß gegen das MVVM Pattern gesehen.

Ich kann ja auch z.B. hergehen und sagen ich habe ein MVVM Pattern in einer Angular Applikation wenn ich weiters davon ausgehen die View ist meine html Seite, der Component mein MVVM (Ein Binding darauf gibt es ja) und mein Model sind eben die ganzen Frontend TypeScript Klassen (In einer bestimmten abgeschwächten Form können diese ja auch Teile von BL repräsentieren)

Der BalusC widerum ist ne ziemlich große Nummer… :slight_smile:

Input?

MVC und gut, da kannst du alles anbinden was du willst ob nun jsf oder fx