MVC Model

Slevin

Mitglied
Hallo zusammen,

ich schreibe gerade eine kleine Anwendung um das MVC Model zu üben.
Im Großen und Ganzen ist mir alles klar dann bin ich heute auf folgende Frage gestoßen:

Wie bekomme ich die "Daten" von der View zum Controller?
Also wie spreche ich die grafischen Komponenten richtig an, ist es richtig die Komponenten in der View auf "public" zu setzen oder brauche ich dafür auch getter und setter?

Als Beispiel damits klarer wird habe ich eine Jlist in der View die ich im Moment auf public habe und auf die ich im Controller zugreifen möchte/muss.

View:

Java:
public final JList jplayerList;

Controller:

Java:
public void actionPerformed(ActionEvent e) { ...
 
String selectedItem = view.jplayerList.getSelectedValue().toString();
...

Grüße
Slevin
 

Slevin

Mitglied
Danke für die Antwort!

Das Jlist ins Model gehört bezweifel ich stark denn es ist ein grafische Komponente:

https://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html

Wegen mir kann es auch eine JTextarea sein, aus der ich den Text lesen möchte den der Benutzer eingegeben hat. Mir geht es mehr um das Prinzip wie spreche ich die grafischen Komponenten an und bekomme so die Daten in den Controller um sie dann ans Model weiterzugeben. Doch nur wenn sie public sind richtig? Getter Setter sinnvoll bei grafischen Komponenten?
 
Zuletzt bearbeitet:

Thallius

Top Contributor
Sorry, hast natürlich recht. Hatte nur List gesehen....

Der View sollte seinen Controller kennen indem Du ihm eine Refgerenz darauf gibst oder indem er eine eigene Instanz davon erstellt.

Beides ist denkbar. Es kommt halt drauf an ob Dein Modell wiederum mit mehreren Controllern umgehen kann. Das verlangt halt nochmal einen zusätzlichen Aufwand um sicher zu sein, das die Daten immer synchron sind, wenn du z.B. zwei Views aufhast die beide die gleichen Daten verwalten.

In dem Controller kannst Du dann Public Methoden definieren die die Daten geben und nehmen und entsprechend mit dem Model kommuniziert.

Gruß

Claus
 

Thallius

Top Contributor
Sorry aber was der schreibt ist nicht mein Verständnis von MVC.

Wenn du im Controller eine Methode vom View aufrufst, erzeugst du eine Abhängigkeit zum View. Sprich der Controller kann ohne den View nicht mehr leben. Genau das aber soll ja beim MVC nicht der Fall sein.

Gruß

Claus
 

stg

Top Contributor
Öhm.... Sinn ist es View und Model zu entkoppeln. Damit das sauber funktioniert kennt der Controller sowohl View als auch Model. Model und View wissen nichts vom Controller. Dem Controller sollte (ja, muss es sogar) egal sein, was die View mit den Daten macht; insbesondere muss es der View aber gänzlich egal sein, wo die Daten herkommen und was anschließend damit geschieht. Wenn die View den Controller kennt, dann wird das ganze Konzept, das eigentlich verfolgt wird, komplett ausgehebelt.
 

Thallius

Top Contributor
Was nützt dir denn ein Controller der nur mit einem bestimmten view funktioniert? Dann kannst du doch auch gleich view und Controller in einem programmieren.

Sinn ist es, dass ich auf meinen Controller ein beliebiges view setzen kann und dieses View dann die Methoden meines Controllers benutzt die es benötigt.

Auf die Art kann ich einen Controller schreiben der mit beliebigen views arbeiten kann und damit das Design der Software nicht mehr von der Funktionalität abhängt.

Gruß

Claus
 

stg

Top Contributor
Der Controller muss nur wissen welche Daten in der View angezeigt werden, nicht aber wie diese dargestellt werden. Die Verantwortlichkeit hierfür bleibt ganz bei der View ... und sogesehen kann ich die View tatsächlich problemlos austauschen, auch ohne den Controller anzupassen. Natürlich müssen vorher definierte Schnittstellen bedient werden. Klar, ändert sich die View grundlegend, das heißt nicht nur die Darstellung, sondern auch der Inhalt, dann muss ich gegebenenfalls auch den Controller anpassen. Genauso verhält es sich auch mit der Beziehung zwischen Controller und Model.

Denkbar wäre es auch die View das Model kennen zu lassen und eine Art "Mastercontroller" nur den Datenaustausch vornehmen zu lassen, aber damit sind wir nicht mehr beim klassischen MVC pattern. Und dem TE geht es ja offenbar darum eben dieses zu lernen.
 

bsnname

Neues Mitglied
Sehr geehrte Damen und Herren,
ich habe eine Frage, die Sie mir eventuell beantworten könnten.
[h=1]Wie kann ich ein UML-Klassendiagramm erstellen, dass das MVC anhand des Bsp. eines Buttons modelliert und wie könnte der Java Code dazu aussehen? Ich wäre Ihnen für eine Antwort sehr dankbar :)
[/h]
 

Ähnliche Java Themen

Neue Themen


Oben