Java MVC in einer Webanwendung

M

mkay94

Gast
Heyo, in Zuge meines Abschlussprojekts (File-Upload und Meta-Daten-Management für Arbeitsnachweise samt Nutzerverwaltung) wollte ich mich mal ernster mit Patterns befassen. Meine ganze Ausbildung lang habe ich JavaSE bis zum Erbrechen gelernt :freak: und dann auch noch JavaEE. Meistens in Form eines JBoss AS + Swing Client.

Mein Abschluss Projekt soll aber in Form eines Webprojekts mit JSF & Richfaces werden. Als DB nutze ich eine MySQL Datenbank. Nach langem Einarbeiten habe ich langsam den Dreh raus.

z.Z. hänge ich bei einer Struktur Frage.
Ich würde gerne das MVC Pattern implementieren. Ich habe z.Z. 2 MBeans (User & Arbeitsnachweis).
Wenn z.b. der Admin User einen neuen User anlegt, rufe ich das derzeit so auf:
<h:commandButton value="Nutzer anlegen" action="#{user.createUser()}"/>

Sämtliche Datenbank-Logik liegt in jeweiligen DAOs. Jedoch frage ich mich bis zu welchem Grad es richtig wäre die Logik aus den Models zu entfernen.
Ich würde das so angehen, dass ich einen UserController anlege, der die Daten aus der Form nimmt und daraus ein User Objekt anlegt und die DBUtil Klassen aufruft und dann Daten in die DB schreibt.
Wäre das der richtige Ansatz?

Ich danke euch :)
 
Bei Java + JSF / *Faces hast du im Grunde die Wahl zwischen:
JavaEE 7 und Spring 4.1
Wenn du mit JavaEE und JNDI und so vertraut bist, greifst du natürlich zu JavaEE ;)


mkay94 schrieb:
Logik [...] Model
In der MVC Welt ist es verboten diese beiden Worte in ein und demselben Kapitel eines Buchen zu erwähnen. Also steht auf die Erwähnung in einem Satz die Todesstrafe :p

Das Model ist im Endeffekt nur ein POJO. Ein Haufen Propertys und jeweils Getter und Setter dazu. Also dein Domain Objekt. Die Klasse, die du mit JPA's @Entity annotierst.
Die Instanziierung solch eines Model Objekts sollte im Optimalfall nur vom DAO/Service aus möglich sein, da man sicher gehen will, dass das Objekt wirklich aus der DB kommt und nicht sonst irgendwo im Code erstellt wurde.

Wenn du es ganz fein strukturieren willst:
1. Browser macht einen GET Request
2. Controller nimmt ihn entgegen
3. Controller wandelt die GET Parameter so um, dass ...
4. er damit die richtigen Informationen vom Service bekommt
5. Der Service nutzt nun das Repository, um auf die Datenbank zuzugreifen
6. Repository macht MAGIC und liefert ein Model Objekt an den Service zurück und der Service zurück an den Controller und der Controller zurück an den Browser.

Ob man nun Service und Repository logisch trennt oder das ganze DAO nennt, ist letztendlich völlig egal.
 
Ui, mit GET Request habe ich (wissentlich) noch nicht gearbeitet. >.<


Ich zeige mal nen groben Ablauf des Erstellen eines User auf, so wie ichs mir dann mit MVC vorstelle(Bennenung entspricht meinen Objekten):

1. Nutzer ruft Seite auf.
2. Nutzer gibt Name & PW ein --> Wäre hier die Value auf #{userController.user.pw//name} ???
3. Der Actionbutton ruft die Methode createUser auf. (#{userController.createUser{})
4. Es wird geprüft ob die Angaben den Vorgaben entsprechen, falls nein wird ein Label mit den neuen Anweisungen gerendert
Falls ja, wird ein User Objekt im Controller angelegt und an die DBUserUtil gegeben die mit der DBConnectUtil eine Verbindung aufbaut und nun dieses User Objekt in die DB schreibt.
5. Wenn die Methode fertig ist und erfolgreich war wird auf der Seite eine Erfolgsmeldung gerendert und man landet erneut auf der Startseite.

Korrigiert mich bitte. Und für Ratschläge bin ich auf offen! Für mich ist diese "professionelle" Webentwicklung recht neu.
 
Zuletzt bearbeitet:
In ein Model gehört wie schon gesagt keine Logik. Das wird in den Controllern abgewickelt. Diese erzeugen Objekte der Modelklassen und arbeiten mit diesen. Zwischen Controller und Modellayee kann optional noch ein Servicelayer liegen um komplexere Operationen abzubilden(Controller sollten möglichst schlank sein)
Im Kontext von Controllern werden Methoden auch gerne Actions genannt.


Um auf dein Beispiel zurück zu kommen.
Die createUser Methode wird irgendwie die Daten der Form übergeben bekommen (Ich habe leider keine Ahnung von JSF.) Diese musst du evaluieren und bei Korrektheit ein neues User Objekt anlegen und in der Datenbank speichern.(Verwendest du gar kein ORM?)
 
Zuletzt bearbeitet:
Doch doch, JPA mit Annotations.
Hatte zeitweise mit JDBC und SQL Befehlen gearbeitet.

Aber danke, immerhin bin ich schon auf der richtigen Bahn.
 
Zurück
Oben