Eine oft aufgeworfene Frage ist welche Teile Model, View und Controller in JSF repräsentieren. Nachdem ich schon einige unterschiedliche Meinungen zu diesem Thema gelesen habe, zeige ich hier die auf dieser Seite verwendete Aufteilung und Namens Konvention.
Zuerst einmal die Erklärung einiger wichtiger Begriffe:
Eine Bean kann Managed Bean und zugleich Backing Bean sein, wenn es in Faces Config registriert ist und zusätzlich bsw Style Class Informationen bereitstellt.
Das Model enthält POJO Klassen, die einfach nur die Daten speichern, die in der View benötigt werden. Für diese Klassen benutze ich kein Suffix, wodurch es lesbarer in den JSF Seiten wird.
de.icoding.model.forumForum, ForumEntryFür die Verwaltung von Stammdaten verwende ich meistens zwei Klassen:
Die View besteht aus der JSF Seite inklusive der Komponenten und den Backing Beans, die View bezogenen Code zur Steuerung der Komponenten enthalten. Für diese Klassen habe ich das Suffix View gewählt, da es in den Seiten lesbarer als Backing ist.
de.icoding.view.forumForumView, ForumListView, ForumListViewEntryFür die Verwaltung von Stammdaten verwende ich meistens drei Klassen:
Der Controller Teil wird von verschiedenen Klassen wie Filter, JSF Servlet, ViewHandler und auch der Business Logik durchgeführt.
de.icoding.controllerServiceFilter, ViewHandlerDie Business Logik ist getrennt aber gehört auch zum Controller, weil die Logik Methoden mit speziellen IDs die Navigation steuern. Für diese Klassen verwende ich das Suffix Action.
de.icoding.action.forumForumActionAm besten ist es man erstellt für alle JSF Seiten mit dynamischen Content auch gleich eine dazugehörige View Bean. Somit hat man in der ganzen Applikation eine einheitliche Struktur und kann auch schnell mal eine Backing Methode einfügen.
Bei einer Seite mit Formular wird einfach die ganze View Bean als Managed Bean registriert und in der verarbeitenden Action Methode mit dieser einen Klasse, die alle Model Referenzen enthält, gearbeitet.
Alle View Beans sind von der Klasse BasicView abgeleitet, die allgemeine Methoden zur Verfügung stellt, die von allen JSF Seiten genutzt werden.
Für JSF Seiten mit statischen Content Teil, also bsw. ein Impressum mit hart codierten Firmendaten, wird keine eigene View Klasse programmiert, sondern nur die Basic View genutzt.
Normallerweise braucht man keine extra Controller Klasse für eine View zu programmieren. Das JSF Framework übernimmt ja bereits Prüfung und Aktualsierung der Model Daten. Eigene Validator und Converter würde ich als Erweiterung des Frameworks sehen.
Eine Ausnahme könnte sein, wenn aufgrund einer Benutzer Aktion die Daten des Model speziell abgeändert werden sollen und man dies nicht in der Action Klasse codieren möchte um es von der Business Logik zu trennen.
Johannes Hammoud MVC 08.11.2008