Best Practice Frage zum MVC-Pattern

niceWork

Mitglied
Hallo zusammen!

Im Rahmen meiner Ausbildung zum Software Engineer habe ich jetzt erstmals richtig mit dem Model-View-Controller Pattern zu tun. Ich finde das vom Konzept her - dieses habe ich glaube ich ganz gut verstanden - sehr angenehm. Habe mich eine Zeit lang damit beschäftigt. Wir haben die Aufgabe bekommen, eine kleine Java Anwendung zu entwickeln, mit der Santa Clause seine Geschenklieferungen verwaltet.

Ich möchte gar nicht lange ausschweifen. Das ganze ist vorerst eine Konsolenanwendung, in der man sich am Anfang einloggt (entweder als Kind => Wunschzettel schreiben) oder als Santa (sieht alle Wünsche und Kinder).

Meine Frage ist eher allgemein:
Der Controller ist der Vermittler, das Model modelliert die Objekte und die View stellt alles dar. Soweit klar. Mich würde nur interessieren - gibt es eine "best practice", wie man so etwas umsetzt, dass die einzelnen Module miteinander verknüpft sind, also Model-View-Controller? Also z. B. das Controller-Objekt in der View instanziieren, oder alles im Controller? Gibt es sonst noch Tipps, wie man mit diesem Pattern effizient arbeitet?
Hier fehlt mir leider noch das Know-How, und da wir momentan Weihnachtspause haben, tun wir uns schwer mit Fragen an die Trainer. Vielleicht kann mir ja hier jemand ein paar Tipps geben 🙂

Achja, das ganze hab ich auf Github (wir machen in der Ausbildung vieles via Github Classroom).
Link dazu:


Sollte es nicht funktionieren bitte um Info, dann mach ich ein Duplikat davon als eigenes Repo.

Danke euch schonmal 🙂🙂
 
Es ist nicht festgelegt, was wo welche Instanz anlegt. Üblich ist z.B. bei Web Applikationen:
- Durch den Request wird im Server ein Controller angelegt.
- Der Controller greift auf die Klassen der pp zu um z.B. Daten zu laden, Aktionen durchzuführen u.s.w. Dabei wird ein Model erzeugt, welches dann an eine View übergeben wird.
- Der Controller muss dann eigentlich nichts von der View wissen, außer evtl. den Namen. Das Framework kann dann z.B. generieren, was der Client zurück bekommt (z.B. Spring MVC mit Thymeleaf -> Der Controller steckt Daten in ein universelles Model und gibt dann nur den Namen der View zurück. Dann kommt das Framework und baut aus Model + View eine Webseite, die zurück geschickt wird.
- Die View erwartet gewisse Daten im Model und greift auf universelle Schnittstellen der Controller zu. Dabei sind die konkreten Controller uninteressant - es interessiert nur der "Vertrag" (Wie sieht die URL aus und was für Daten können mitgeschickt werden...)

Das passt sehr gut, aber sobald man eine statische Applikation hat, wird es schwer. Denn dann gibt es plötzlich durch mehr Möglichkeiten deutlich mehr Anforderungen. Bidirektionale Bindings und so - Dinge die bei einer Web Applikation nicht gehen.

Das bläht dann das Model schnell auf. Statt einfach nur die Daten zu transportieren will man nun Observer-Pattern implementiert haben. Also reicht dann z.B. ein String nicht mehr aus - es muss dann eine StringProperty werden ... Des Weiteren reicht dann schnell der Umfang der Beschreibungssprache nicht aus (also z.B. fxml bei JavaFX) ...

Das Alles führt dann letzten Endes zu einem anderen Pattern MVVM: Model - View - ViewModel. Das ist dann in der Java Welt z.B. mit mvvmFX vertreten. In .Net wäre es bei WPF und co zu finden ...

Aber zurück zu MVC:
In JavaFX wäre es in der Regel so, dass eine View geladen wird (über fxml Datei) und dabei wird automatisch der Controller mit erzeugt. Dadurch hat man eine deutlich stärkere Bindung zwischen View und Controller als üblich.
 

Zurück
Oben