MVC Pattern - sinnvolle Integration

zlFavourite

Aktives Mitglied
Ich bin gerade dabei mein Übungsprojekt umzubauen, sodass ich eine genauere Trennung zwischen GUI und Backend bekomme. Hierzu bin ich auf das MVC Pattern gestoßen wozu ich noch eine Frage hätte.
Ich erstelle meine GUI mit dem GUI Designer. In dieser Datei möchte ich dann meinen Controller haben, da ich dort schon die Listener habe. Nun frage ich mich aber ob eine View überhaupt sinnvoll ist. Wenn ich in meinem Model z.B. einen Wert aus der GUI abfragen möchte kann ich das ja einfach mit label.getText() machen. Im View würde ich ja normal eine set und get Methode schreiben und diese dann im Model aufrufen. Das ist doch unnötiger Aufwand welcher mir so keinen Mehrwert bringt oder nicht?

Im Model bearbeite ich ja meine Daten. Oftmals muss ich dabei aber auch direkt auf die Usereingabe zurückgreifen um z.B. eine If Anweisung abzufragen. Ich hatte kein Beispiel gefunden bei dem im Model direkt auf den Userinput zurückgegriffen wurde, aber anders kann ich das doch nicht lösen, oder?

Vielen Dank für eure Hilfe.
 

mihe7

Top Contributor
Oftmals muss ich dabei aber auch direkt auf die Usereingabe zurückgreifen um z.B. eine If Anweisung abzufragen. Ich hatte kein Beispiel gefunden bei dem im Model direkt auf den Userinput zurückgegriffen wurde, aber anders kann ich das doch nicht lösen, oder?
Die View zeigt im Idealfall einfach an, was das Model enthält. Insofern stellt sich das Problem nicht.
 
K

kneitzel

Gast
Also aus dem anderen Thread habe ich entnommen, dass Du ja Swing einsetzt. Das sehe ich durchaus etwas Problematisch, da Swing aus meiner Sicht vieles nicht direkt unterstützt was ich für eine saubere Umsetzung gerne hätte. Du wirst die Elemente daher nicht wirklich gut entkoppeln können fürchte ich.

Ein Tool, das Dir dann alles in eine Klasse wirft, verleitet dann dazu, dass man Controller Dinge in der View unterbringt. Da muss man aber dann strikt aufpassen und eben nichts in der Art machen. Wie es aussehen könnte möchte ich einmal auf die Schnelle versuchen zu skizzieren. Aber das kann nur oberflächig sein und es wird im Netz bestimmt deutlich bessere Ausarbeitungen geben ...

Die View zeigt Daten des Models an - so wie es schon @mihe7 gesagt hat. Veränderungen / Eingaben werden entweder direkt im Model gepflegt (Da findet man bei anderen Technologien die Bindings.) oder die View weiss, was der Controller will und ruft es entsprechend auf. Das Letztere wäre aus meiner Sicht die mögliche Umsetzung des MVC Patterns mit Swing und würde folgenden Code ergeben:

- Daten werden über ein Model bereit gestellt. Das kann eine einfache Entity sein oder halt ein neue Klasse mit wichtigen Informationen.
- Der Controller selbst kennt die Details der View nicht! Der Controller darf also keine Abhängigkeit zu der View haben bezüglich Aufbau. Die einzige Abhängigkeit kommt durch das Model, das sozusagen der Vertrag ist zwischen Controller und View. Und der Controller bietet nach Außen Aktionen an. Da kann dann also etwas aufgerufen werden oder so ...
- Die View basiert auf einem Model. Die Daten aus dem Model werden einfach angezeigt. Da Swing kein Binding hat, hast Du hier dann in der Regel Code, der Daten aus dem Model entnimmt und diese in Controls anzeigt. Dann hat die View gewisse Aktionen und daher gibt es Listeners. (Im Idealfall wäre das einfach ein Binding hin zum Controller. Die Daten würden in einem Model zusammen gepackt und dem Controller mit übergeben. Ideales Beispiel sind da immer Webseiten. Die Daten des Formulars werden einfach mitgegeben. Oder der Controller bekommt gewisse Daten mit, die in der URL verpackt wurden oder so ... ) So ein Listener in der View kann also einfach sein:
a) Daten für dien Controller zusammen packen
b) Aufruf Methode im Controller.

Was da dann raus kommen kann ist:
- Model Klasse, die generell Daten der View hält, also auch Daten aus Eingabefeldern und so.
- Methode in der View, die Daten aus dem Model in die Controls schiebt
- Methode in der View, die Daten aus den Controls in das Model schiebt.
- Listener sind immer gleich also onSchoeneAktionButton(..) ruft erst updateModel() auf und dann controller.machSchoeneAktion().

Wie Änderungen an den Daten vom Controller an die View gehen, kann man sich dann noch überlegen. Üblich ist oft das Observer Pattern. Das Model kann einfach geändert werden und das bekommt die View dann von alleine mit. Du hast in der View einfach ein (oder mehrere) Event, das der Controller direkt oder indirekt triggern kann.
Oder die View hat eine (oder mehrere) update() Methode, die der Controller einfach am Ende der Aktion ausführen kann.
Ich bevorzuge dabei das Erste! Dadurch braucht der Controller keine Referenz mehr auf die View. (Evtl. erstellt er diese, aber das muss nicht zwingend sein) ...

Dann hat:
- die View eine Referenz des Models und wenn es Aktionen gibt, eine Referenz zu einem Controller.
- der Controller hat eine Referenz auf das Model (Und die View, wenn Model keine Möglichkeit bietet für Observer!)
- das Model ist dumm - das enthält nur die Daten und bietet Optionen für Observer an!

Aus meiner Sicht hat dieses MVC Pattern bei Desktop Applikationen gewisse Probleme und passen daher nicht wirklich. Darauf möchte ich aber nicht weiter im Detail eingehen. Statt dessen ist das MVVM Pattern besser geeignet. Aber da bietet Swing weiter nichts groß. Bei JavaFX wäre mvvmFX als Library eine gute Option. Aber das ist dann wieder ein anderes Thema ...

Das einfach einmal als meine pers. Sicht auf dieses Thema.
 

zlFavourite

Aktives Mitglied
Vielen Dank für deine ausführliche Erklärung. So wie ich das sehe bin ich das ganze falsch angegangen. Ich werde wohl das Projekt mit JavaFx neu aufsetzen und so schauen wie ich dann die Module von einander trenne.
 
K

kneitzel

Gast
Ja, danke @mihe7 für die Ergänzung! Die Wortwahl mit "dumm" war nicht gut überlegt und kann durchaus falsch verstanden werden. Aber hier ging es - wie von @mihe7 sehr gut heraus gestellt - nur rein um das MVC Pattern und den Beziehungen der Teile untereinander und "dumm" bedeutet nur, dass das Model eben Controller und View nicht kennt. (Also eine saubere Trennung von Verantwortlichkeiten - was dann so Dinge ermöglicht, wie z.B. neue UIs zu bauen mit minimalen Änderungen an bestehendem Code.)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
mihe7 equals und instanceOf pattern matching Allgemeine Java-Themen 7
L Pattern Eventhandler Allgemeine Java-Themen 5
EinNickname9 Best Practice Singleton und Singleton mit Instanz zu anderer Klasse -Pattern Allgemeine Java-Themen 30
J Meinung zum verwendeten Design Pattern Allgemeine Java-Themen 4
Kirby.exe Filename nach bestimmtem Pattern durchsuchen Allgemeine Java-Themen 5
Meeresgott Best Practice "Spezifisches" Factory Pattern ? Allgemeine Java-Themen 1
H Strategy Pattern - changeColor() Methode - input rgd oder hex einlesen Allgemeine Java-Themen 1
M Vaadin MVP Pattern Allgemeine Java-Themen 1
N Java MVC Pattern richtig anwenden Allgemeine Java-Themen 24
M OOP Design Pattern - "extends Observable implements Observer" Allgemeine Java-Themen 0
K Factory Pattern: Mit Generics umgehen Allgemeine Java-Themen 6
perlenfischer1984 Welches Design Pattern ist geegneit. Allgemeine Java-Themen 7
perlenfischer1984 Hilfe bei Design (Pattern) Allgemeine Java-Themen 5
J Compilerfehler bis in java.util.regex.Pattern... Allgemeine Java-Themen 2
B MVC-Pattern größeres Beispiel Allgemeine Java-Themen 16
GreenTeaYT Verstehe nicht ganz das Observer Pattern in einer Arrayliste? Allgemeine Java-Themen 3
L Erste Schritte Java Date Format Pattern bestimmten Allgemeine Java-Themen 2
D Pattern mit Pattern vergleichen Allgemeine Java-Themen 3
D OOP Design Pattern für GUI - Datenbank Anwendung Allgemeine Java-Themen 1
S Hilfe bei geeignetem Pattern (Decorierer) Allgemeine Java-Themen 2
F Welches Design Pattern? Allgemeine Java-Themen 3
J Pattern aus String entfernen Allgemeine Java-Themen 2
S Pattern.Match Suche: For Schleife einbinden und in Liste schreiben Allgemeine Java-Themen 3
D Variablen zur Laufzeit global speichern (Registry Pattern?) Allgemeine Java-Themen 6
Rudolf State Pattern als Enum? Allgemeine Java-Themen 10
M massenhaft verschiedene Date-Pattern Allgemeine Java-Themen 3
Guybrush Threepwood Pattern gesucht: Punkt ohne Leerzeichen dahinter Allgemeine Java-Themen 3
turmaline OOP Decorater Pattern für Varifikationsverhalten Allgemeine Java-Themen 13
T HTML Tag Position mittels Pattern ermitteln Allgemeine Java-Themen 7
X Datentypen Prozentualer Abgleich zwischen 2 Strings (Pattern?) Allgemeine Java-Themen 3
H Pattern.compile Syntax Allgemeine Java-Themen 15
B RegEx: (Um-)formulieren eines Pattern zur Identifizierung komplexer URLs Allgemeine Java-Themen 7
D [Drag&Drop] Design-Pattern-Frage Allgemeine Java-Themen 4
T Pattern für Benutzer-Gruppen, RMI Allgemeine Java-Themen 5
E Super erzwingen, konzept/pattern gesucht. Allgemeine Java-Themen 8
H Problem mit der Klasse Pattern - Regulärer Ausdruck Allgemeine Java-Themen 2
Eldorado Meinung zu einem abgewandelten MVC-Pattern Allgemeine Java-Themen 2
R Matcher - Pattern mit belibigem Anfang Allgemeine Java-Themen 2
H Bestimmten String mit Pattern und Matcher herauslesen => kein erfolg Allgemeine Java-Themen 9
I Pattern zum Erweitern existierender Objekte Allgemeine Java-Themen 4
I Template Method pattern mit "geschützten Methoden" Allgemeine Java-Themen 5
T Pattern: Passive View Allgemeine Java-Themen 2
K Verständnisprobleme bei Observer-Pattern mit größerem Datenmodell Allgemeine Java-Themen 32
T Pattern: Greedy, Reluctant, Possessive Allgemeine Java-Themen 4
S Hilfe bei Pattern Allgemeine Java-Themen 5
N Registry Pattern Allgemeine Java-Themen 7
Tandibur Denkfehler bei Pattern.matches? Allgemeine Java-Themen 3
Tandibur pattern dynamisch vorkompilieren Allgemeine Java-Themen 9
A Observer Pattern: feuern bei neuer Referenz-Zuweisung? Allgemeine Java-Themen 8
N Pattern Allgemeine Java-Themen 11
Iron Monkey Pattern - Matcher - Problem Allgemeine Java-Themen 3
ruutaiokwu welches design pattern? frage an die oo-experten unter euch... Allgemeine Java-Themen 3
G Accordion Design Pattern Frage Allgemeine Java-Themen 2
hdi Hilfe beim Design (Stichwort OO, Pattern, ...) Allgemeine Java-Themen 11
U Verständnisschwierigkeiten Observer Pattern Allgemeine Java-Themen 18
H2SO3- String(pattern) von SimpleDateFormat auslesen Allgemeine Java-Themen 7
M Problem mit Pattern Allgemeine Java-Themen 3
N Welches design pattern? Allgemeine Java-Themen 8
B Pattern gesucht, Programm Optionen, Casten vermeiden Allgemeine Java-Themen 3
D Welches Pattern kann ich nutzen? Allgemeine Java-Themen 9
J Suche regex-Pattern fuer Liste von Zahlen zwischen 0-100 Allgemeine Java-Themen 6
G Sequenzdiagramm Dao Pattern Allgemeine Java-Themen 3
D Observer/Observable Pattern vs. Listener-Konzept Allgemeine Java-Themen 4
S regex-Pattern Ausdruck negieren Allgemeine Java-Themen 2
J Pattern eines Textes Allgemeine Java-Themen 4
M Java Garbage Collector Frage (Singleton Pattern) Allgemeine Java-Themen 13
Y Pattern Problem Allgemeine Java-Themen 2
G UML-Diagramme mit DAO Pattern Allgemeine Java-Themen 7
S Pattern regex Allgemeine Java-Themen 2
G Composite, Design Pattern, printTree Allgemeine Java-Themen 42
J Regex Pattern Problem Allgemeine Java-Themen 12
P MVC Pattern Allgemeine Java-Themen 31
C Pattern für Kommunikation gesucht Allgemeine Java-Themen 3
G Frage zu MVC Pattern Allgemeine Java-Themen 6
J Pattern und Regex Allgemeine Java-Themen 2
L Wie Pattern anwenden um Cipher zu nutzen Allgemeine Java-Themen 2
S Singleton Pattern mit Generics Allgemeine Java-Themen 4
M MVC Design Pattern - Verständniss Fragen Allgemeine Java-Themen 3
F Typüberprüfung in Superklasse - geeignetes Pattern? Allgemeine Java-Themen 11
M Java Pattern hilfe Allgemeine Java-Themen 6
N Observer Pattern Allgemeine Java-Themen 2
G Problem mit MVC-Pattern (Controller als anonyme Unterklasse) Allgemeine Java-Themen 2
F Design Pattern zur Realisierung von Mehrfachvererbung? Allgemeine Java-Themen 8
M Pattern aus Properties Allgemeine Java-Themen 3
I Composite Pattern für Ausgabe von Ausdruck Allgemeine Java-Themen 3
G mit Pattern strings filtern ein kleines problemchen ;) Allgemeine Java-Themen 2
M nach einem Pattern splitten Allgemeine Java-Themen 2
F Composite Pattern in Java? Allgemeine Java-Themen 1
G problem mit dem observer pattern Allgemeine Java-Themen 3
C Matcher/Pattern ersetzten für JDK 1.3 Allgemeine Java-Themen 2
M Pattern: Summary of regex constructs: Backslash Allgemeine Java-Themen 2
G Scanner und Abbruchbedingung/Pattern Allgemeine Java-Themen 2
F suche im Classpath mit Pattern *.gif Allgemeine Java-Themen 16
G Frage zum Observer Pattern Allgemeine Java-Themen 4
D Design Pattern: Singleton Allgemeine Java-Themen 4
M Pattern, Matcher, Split Allgemeine Java-Themen 2
Y Wie sinnvolle unit tests schreiben Allgemeine Java-Themen 29
V Sinnvolle "Lernreihenfolge" Allgemeine Java-Themen 2
H Frage sinnvolle Datenspeicherung und -verarbeitung Allgemeine Java-Themen 3
J Sinnvolle Dateigroesse fuer PDAS-Transfer Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben