Model View Controller: Verständnisproblem

sp2017

Mitglied
Eventuell eine blöde Frage, aber ich bin gerade etwas verwirrt. Ich bin dabei eine GUI application zu erstellen und versuche mich am MVC pattern zu halten. Kurz erklärt: Der User kann über das GUI auswählen, welche Named Entity Extraction APIs gewählt werden sollen (angenommen es stehen 4 zur Auswahl, dabei kann er dann 1 oder alle 4 APIs wählen) und zusätzlich kann sich der User noch die Korrelation zwischen den erhaltenen entities berechnen lassen.
Mir ist klar das eben view mein UI darstellt, controller für Erstellung und Update der View zuständig ist und model die Daten zur Verfügung stellt (z.B. Daten in einem File updaten).

Für meinen Fall, ist mir jetzt nicht klar, was alles eben in das model kommt, gibt man den ganzen Code z.B. zum Extrahieren der Entities und zur Berechnung der Korrelation in die model Klasse, oder habe ich hier nur eine Methode, die dann die entsprechende Korrelation Klasse z.B. aufruft?
Danke
 

mrBrown

Super-Moderator
Mitarbeiter
Für meinen Fall, ist mir jetzt nicht klar, was alles eben in das model kommt, gibt man den ganzen Code z.B. zum Extrahieren der Entities und zur Berechnung der Korrelation in die model Klasse, oder habe ich hier nur eine Methode, die dann die entsprechende Korrelation Klasse z.B. aufruft?
Ersteres ;)

Ich würde alle zu den Daten gehörende Logik ins Model schieben, und der Controller ist dann nur noch für die Behandlung der Events aus der View zuständig.
 

Thallius

Top Contributor
Ersteres ;)

Ich würde alle zu den Daten gehörende Logik ins Model schieben, und der Controller ist dann nur noch für die Behandlung der Events aus der View zuständig.

Womit du die Austauschbarkeit des Modells, ein essentieller Grundgedanke des MVC, unmöglich machst.

Die Logik gehört natürlich in den Controller. Wobei dich niemand daran hindert den Controller in mehrere Schichten aufzuteilen. Also quasi dann ein MVCC. Das hält den Controller Teil dann übersichtlicher.

Gruß

Claus
 

mrBrown

Super-Moderator
Mitarbeiter
Womit du die Austauschbarkeit des Modells, ein essentieller Grundgedanke des MVC, unmöglich machst.

Die Logik gehört natürlich in den Controller. Wobei dich niemand daran hindert den Controller in mehrere Schichten aufzuteilen. Also quasi dann ein MVCC. Das hält den Controller Teil dann übersichtlicher.
WTF, irgendwas hast du Grundlegend nicht verstanden. Lies dir mal bitte irgendeinen guten Artikel zu MVC durch.

Nicht die Austauschbarkeit des Models ist Ziel, sondern die Entkopplung aller drei Komponenten.
Das impliziert durchaus, dass man das Model (gleiches Interface vorrausgesetzt) austauschen kann - generell geht es aber eher um die Austauschbarkeit von View (ein Model - mehrere Ansichten) und der Controller.


Wenn man wie in deinem Vorschlag die Logik im Controller und die Daten im Model hat, bricht man vollkommen damit und auch mit generellem Objekt-Orientiertem Design.

Bei dir ist genau gar nichts austauschbar, wenn Logik und Daten getrennt sind.
Man kann das Model austauschen - aber auch nur gegen ein identisches (was sowieso völliger Unsinn ist - die gleiche View soll verschiedene Models ohne Anpassung darstellen, quasi erst Konten, dann Eisbecher oder so?).
Man kann den Controller austauschen, aber dann hat man keine Logik mehr und kann mit dem Model nichts anfangen.
Man kann es nichtmal vernünftig testen, das Model enthält ja keine testbare Logik, und der Controller braucht die View, dies in nem Test erstmal so nicht gibt.


Ganz anders, wenn das Model auch die Logik der Domäne enthält.

Man kann es wunderbar testen - das Model enthält die relevante (von der View unabhängige) Logik.
Man kann wunderbar ein anderes View-Controller-Paar zum anzeigen des Models benutzen - die relevanten Teile stecken ja im Model.
Man kann das Model auch einfach völlig ohne View mit CLI oder in ner WebApp verwenden - die Domänenlogik steckt schließlich im Model, und nur der Darstellungspart (= VC) wird ersetzt.
 

sp2017

Mitglied
Ich habe zu meiner ursprünglichen Frage noch eine Frage.

Die GUI sieht nach wie vor so aus wie beschrieben: Der User kann über das GUI auswählen, welche Named Entity Extraction APIs gewählt werden sollen (angenommen es stehen 4 zur Auswahl, dabei kann er dann 1 oder alle 4 APIs wählen) und zusätzlich wird noch die Korrelation zwischen den erhaltenen entities berechnet.

Jetzt soll dem User am Ende in der View die Korrelation angezeigt werden. Dazu benötige ich zuerst die Methode zur entity extraction und erst danach kann die Korrelation berechnet werden. Da ich ja verschiede APIs zur Verfügung habe, muss ich wissen welche API der User für die Entity Extraction gewählt hat.

Mir ist klar das ich zunächst mal überprüfen muss, welche API gewählt wurde. Nur wird diese Überprüfung dann im Controller durchgeführt und dann vom Controller die passende Methode zur extraction aus dem Model aufgerufen. Oder wird vom Controller das Model aufgerufen und dort dann überprüft welche API gewählt wurde und dann die jeweilige Methode im Model?
 

mrBrown

Super-Moderator
Mitarbeiter
Beides ist möglich, das hängt ein bisschen davon ab, wie die Auswahl und Model/Controller umgesetzt sind.

Wie sehen denn bei dir grob Model und Controller aus?
Sind die einzelnen APIs als Objekte vorhanden?
 

truesoul

Top Contributor
Hallo.

Im Internet gibt es zwei Varianten die man in etlichen Artikel findet zu MVC.
  1. Model (Datenschicht ohne Logik), Controller (sämtliche Logik), View (Ansicht)
  2. Model (Buisness Logik und Datenhaltung), Controller (Event Handling), View (Ansicht)
Ich persönlich mag die 2 Variante mehr, weil Sie sich richtiger anfühlt. Und mrBrown auch auch dazu eine gute Erklärung gebracht.
Wenn man sich das beide Beispiele anschaut sieht man vielleicht auch, welche sich besser (sinnvoller) testen lassen und welche besser "austauschbar" sind.

Ich finde man sollte auch andere Entwurfsmuster in betracht ziehen.

Model View Viewmodel (MVVM)
Model View Presenter (MVP)
  • Die View ist besser entkoppelt vom Model. Der Presenter ist dafür verantwortlich das Model an die View zu binden
  • Einfacher zu testen, da die Interaktion mit der View über eine Schnittstelle erfolgt
  • Komplexe View's können mehrere Presenter haben. Normalerweise sehen sich die Presenter und View 1 zu 1 gegenüber.
Grüße
 

mrBrown

Super-Moderator
Mitarbeiter
Im Internet gibt es zwei Varianten die man in etlichen Artikel findet zu MVC.
  1. Model (Datenschicht ohne Logik), Controller (sämtliche Logik), View (Ansicht)
  2. Model (Buisness Logik und Datenhaltung), Controller (Event Handling), View (Ansicht)
Ich persönlich mag die 2 Variante mehr, weil Sie sich richtiger anfühlt. Und mrBrown auch auch dazu eine gute Erklärung gebracht.
Wenn man sich das beide Beispiele anschaut sieht man vielleicht auch, welche sich besser (sinnvoller) testen lassen und welche besser "austauschbar" sind.
Wie oben schon mal gesagt: Auch wenn es etliche Artikel zu ersterem sind, gute Artikel oder gar Argrumente sind da nicht drunter ;)

Ich finde man sollte auch andere Entwurfsmuster in betracht ziehen.

Model View Viewmodel (MVVM

Model View Presenter (MVP)

Für beide sollte man aber MVC verstanden haben :p
Das M bleibt bei vernünftiger Umsetzung auch in allen gleich, dann kann man problemlos wechseln :D
 

sp2017

Mitglied
Ich weiss das es etliche Artikel online dazu gibt, darum bin ich auch etwas verwirrt weil überall etwas anderes steht.

Ja, die APIs sind als Objekte vorhanden. Im Prinzip wird in der View nur angegeben welche API benutzt werden soll und welche Korrelation (3 verschiedene sind vorhanden) und hier können dann alle vorhandenen APIs und Korrelationskoeffizienten oder nur eine oder 2,… gewählt werden, und über einen Button sollte dann eben die Entity extraction (mit den zuvor vom User gewählten APIs) ausgeführt werden und im Anschluss die Berechnung der Korrelation (auch mit den zuvor vom User gewählten Möglichkeiten).
 

mrBrown

Super-Moderator
Mitarbeiter
Die Überprüfung, welche gewählt ist, sollte im Controller stattfinden - das Model weiß ja dann erstmal nicht, wie überhaupt gewählt wird.

Das gewählte gibst du dann an irgendeine Klasse aus dem Model weiter, und das macht dann das geforderte mit den Daten
 

andy82

Mitglied
...
Für meinen Fall, ist mir jetzt nicht klar, was alles eben in das model kommt, gibt man den ganzen Code z.B. zum Extrahieren der Entities und zur Berechnung der Korrelation in die model Klasse, oder habe ich hier nur eine Methode, die dann die entsprechende Korrelation Klasse z.B. aufruft?
Danke
In der Praxis (z.B. einer großen Desktop-Anwendung) ist ein MVC-Konstrukt nur ein logischen Teil (von Fall zu Fall möglich nicht kleinerer teilbar ???) von mehreren logischen MVC-Teilen einer GUI (Frame, Stage...), daher gehört die Logik, z.B wie Daten aus der Datenbank bekommt, berechnet ... nicht zu einem MVC-Konstrukt, sondern zu anderen Schichten wie Business Process, Persistence Manager, Wrapper-Schicht ... Beispiel einer Kunden-Liste (nur ein Teil der GUI):
Model: ObservableList<Kunden>, ArrayList<Kunden>, ListModel ...
View: ListView, JList ...
Controller: erhält Steuerung, wie Kunden-Liste angezeigt...
- Sollte ein Kunde selektiert, sendet Controller Event an übergeordneten Controller (Application, BusinessProcess ..., die mehreren Controller steuern, einschließlich dies!). Ein weitere Controller eines MVC-Konstrukt (z.B. Zeige Kunden-Attributes) bekommt Event, leitet, steuern intern an seinen Model, View ...
- Sollte Änderungen für dieser Kunde passiert sein (egal ob nur temporär geändert (noch nicht save!) oder endgültig...), die Steuerung sollte nicht in diesem Controller passieren, sondern in Business Object, Persistence Manager, Wrapper-Schichten ... getan werden. Dort werde auch die Zustände eines Objects (transient, change, save, delete ...) definiert.
 
Zuletzt bearbeitet:

mrBrown

Super-Moderator
Mitarbeiter
In der Praxis (z.B. einer großen Desktop-Anwendung) ist ein MVC-Konstrukt nur ein logischen Teil (von Fall zu Fall möglich nicht kleinerer teilbar ???) von mehreren logischen MVC-Teilen einer GUI (Frame, Stage...), daher gehört die Logik, z.B wie Daten aus der Datenbank bekommt, berechnet ... nicht zu einem MVC-Konstrukt, sondern zu anderen Schichten wie Business Process, Persistence Manager, Wrapper-Schicht ... Beispiel einer Kunden-Liste (nur ein Teil der GUI):
Das ist das 'M' in MVC...

Model: ObservableList<Kunden>, ArrayList<Kunden>, ListModel ...

Von denen würde ich nur Kunden und ArrayList ins reine Domain-Model einordnen.
ObservableList und ListModel sind an bestimmte GUI-Frameworks gebunden, die gehören tendenziell eher in ein ViewModel
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Model View Controller Java Basics - Anfänger-Themen 7
C OOP Model View Controller - Prinzip Java Basics - Anfänger-Themen 6
K Model-View-Controller Java Basics - Anfänger-Themen 15
K Frage zum Model View Controller Prinzip Java Basics - Anfänger-Themen 6
megachucky Model View Controller Pattern - Suche Hilfe bei Anwendung Java Basics - Anfänger-Themen 4
S Model-View-Controller Konzept Beispiel Java Basics - Anfänger-Themen 11
I Klassen Java Qt Model/View Datenhaltung Java Basics - Anfänger-Themen 4
G Einbindung von MVC (Model-View-Controll) Java Basics - Anfänger-Themen 8
richis-fragen JTable den angezeigten WERT nicht den Wert aus dem Model ausgeben. Java Basics - Anfänger-Themen 3
richis-fragen JTable effektiv angezeigter Text ausgeben nicht Inhalt vom Model Java Basics - Anfänger-Themen 9
G Model mit Models füllen Java Basics - Anfänger-Themen 9
W Befüllung einer Tabelle mit Checkbox, Trennung GUI und Model Java Basics - Anfänger-Themen 5
Q MVC Verständnisproblem: Controller vs model.modelChanged() Java Basics - Anfänger-Themen 0
M Problem mit JTable und Model Java Basics - Anfänger-Themen 3
C Bounded Range Model Java Basics - Anfänger-Themen 1
M Input/Output Vom Model zur Database? Java Basics - Anfänger-Themen 7
propra Wie mache ich einem JPanel mein bereits instanziertes Model bekannt Java Basics - Anfänger-Themen 9
F MVC: Model Klasse erstellen Java Basics - Anfänger-Themen 3
N local variable model is accessed from within inner class; needs to be declared final Java Basics - Anfänger-Themen 4
L Eigenes List Model für Icon + String -> Speicherhungrig? Java Basics - Anfänger-Themen 8
S Forumlare nach dem MVC-Model Java Basics - Anfänger-Themen 5
hdi Fehler beim Model-Update einer JList (DefaultListModel) Java Basics - Anfänger-Themen 3
hdi JList mit Model und Observer -> Chaos, blicke nicht durch Java Basics - Anfänger-Themen 22
K Problem mit Abstract Table Model Java Basics - Anfänger-Themen 5
C JTable Model - getValueAt (int) Java Basics - Anfänger-Themen 3
G JTable mit eigenen Model neu zeichnen Java Basics - Anfänger-Themen 4
L Model einer Table bekommen Java Basics - Anfänger-Themen 6
E Model und i18n bzw. Properties Java Basics - Anfänger-Themen 10
P Tabelle mit Model -> getSelectedRow Java Basics - Anfänger-Themen 4
M model übergeben? Java Basics - Anfänger-Themen 16
I Kamera anschließen / Bild machen / Live View / Externe Blitz Java Basics - Anfänger-Themen 19
sserio Java Fx, wie erstellt man einen EventHandler, der durch das Drücken eines Button Texte in eine Table view einfügt Java Basics - Anfänger-Themen 17
G SQL View query Java Basics - Anfänger-Themen 4
H Best Practice View probleme Java Basics - Anfänger-Themen 2
L Java Package View Java Basics - Anfänger-Themen 6
S Modell View Controller Verständnisfrage Java Basics - Anfänger-Themen 24
M Erste Schritte Eclipse + design view Java Basics - Anfänger-Themen 3
R aktualisierung des View im MVC-Pattern Java Basics - Anfänger-Themen 5
G Eclipse: In Problems View schreiben? Java Basics - Anfänger-Themen 10
A Datentypen Typecast im View Java Basics - Anfänger-Themen 4
A OOP MVC Frage View Java Basics - Anfänger-Themen 2
F View überwachen Java Basics - Anfänger-Themen 6
S JTree, Problem mit View Update Java Basics - Anfänger-Themen 2
K JAVA HEX View! Java Basics - Anfänger-Themen 2
M Controller + View: Fehlermeldungen Java Basics - Anfänger-Themen 2
E MVC - Was darf View Java Basics - Anfänger-Themen 15
E MVC - ein View für mehrere Models Java Basics - Anfänger-Themen 2
EchtKeineAhnungManchmal Controller aus FXML Datei entfernen Java Basics - Anfänger-Themen 49
B Objekt von EJB in Controller (CDI) - Klasse füllen? Java Basics - Anfänger-Themen 3
H Eine befühlte Klasse weiter geben an Controller Java Basics - Anfänger-Themen 12
R Variablen Variable an FXML-Controller übergeben Java Basics - Anfänger-Themen 4
N JavaFX - (Controller) - Klasse verkleinern Java Basics - Anfänger-Themen 8
J MVC Pattern, mehrere Controller/Views/Models Java Basics - Anfänger-Themen 0
F MVC -> Probleme beim Controller Java Basics - Anfänger-Themen 6
F Viele Controller-Klassen Java Basics - Anfänger-Themen 5
Antoras Singleton oder Controller / Datenverwaltungsklasse? Java Basics - Anfänger-Themen 10
T Kommunikation zwischen Controller und GUI Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben