MVC - Logik zum Verändern der View

Naryxus

Aktives Mitglied
Hallo,

ich hab mal eine Frage bezüglich des MVC. Mir ist klar, dass das alles so gut wie möglich getrennt sein sollte. Ich arbeite im Moment an einem Formular, dessen Inhalt lediglich überprüft werden soll und in einer Datei gespeichert werden soll. Soweit konnte ich das vom Konzept her auch gut unterscheiden.

Nur sind mir jetzt verschiedene Ideen zur besseren Benutzerfreundlichkeit gekommen. So sollen also verschiedene Methoden zur Veränderung der View eingebaut werden. Nur in welchen Bereich sollen diese Methoden jetzt gehören? Stecke ich sie ins Model kann man das Model nicht einfach von der View trennen, ohne dass es noch funktioniert. Aber so richtig in die View gehört es ja auch nicht.

Ein kleines Beispiel einer Methode zum besseren Verständnis wäre vielleicht:
Es gibt eine Liste. Klickt man auf ein Element dieser Liste, wird es aus dieser Liste gelöscht und in eine andere Liste eingefügt. Wo gehört dieses Verschieben jetzt hin?

Liebe Grüße, Naryxus
 
Dem View liegt ja ein Modell zugrunde und um bei deinem Beispiel zu bleiben: Der Controller übernimmt das Verschieben: Er nimmt es aus dem einen Listenmodell und steckt es in das andere. Die geänderten Listenmodelle benachrichtigen den View über Listener.
In diesem Fall hätte das Modell aus dem MVC zwei Submodelle, eben diese Listenmodelle.
 
Danke für die Antwort. Bei mir haben sich daraus jetzt noch zwei Fragen ergeben:

  1. Das würde also heißen, dass ich bei der Initialisierung die zwei Listen dem Konstruktor der View übergebe und dann bei jeder Änderung eine Methode update(List1, List2) aufrufen würde?
  2. Übergebe ich dann vom Controller aus gleich eine JList oder übergebe ich eine List<E> und konstruiere dann in der View die entsprechende JList daraus?

Grüße, Naryxus
 
Du erstellst 2 mal (Default)ListModel und übergibst diese an deine JLists(also díe GuiKomponenten).
Dann nimmt dein Controller das eine Element aus ListModel 1 und schiebt es in das ListModel 2.
Deine JLists werden dann per Listener über diese Veränderung informiert und zeichnen sich mit dem aktuellen Inhalt neu.
 
Okay. Sorry, aber so ganz verstehen tu ich das immer noch nicht... :bahnhof:

Ich versuche mal mein Programm etwas genauer zu beschreiben:
Ich habe ein Formular, bei dem größtenteils einzelne Textfelder ausgefüllt werden sollen. Damit nicht so viel Schreibarbeit entsteht gibt es dann verschiedene Listen von vordefinierten Werten, die ausgewählt werden können, da hier kein anderer Wert Sinn machen würde.

Für mich ist es hierbei erstmal schwierig mir zu überlegen, wie ein vernünftiges Modell hierbei aussehen sollte. Denn grundlegend ist die Aufgabe des Programmes eigentlich nur eine Übernahme der eingegeben Werte in die Textfelder in ein zusammenhängendes, eventuell formatiertes Textdokument (beispielsweise eine HTML-Seite). Zusätzlich soll ein Parser über die Werte laufen, damit keine falschen Eingaben getätigt werden können.

Aus euren Antworten heraus, habe ich für das Modell jetzt verstanden, dass dies eigentlich eine Schablone für die GUI ist (Wie am Beispiel mit den Listen, dass ich im Modell zwei Listen habe, durch die in der GUI die grafischen Listen "gezeichnet" werden; Das kann ich soweit noch nachvollziehen). Aber es macht doch keinen Sinn, jedes einzelne Textfeld durch ein Attribut des Typs String darzustellen.
Ich hätte im Modell jetzt eine Methode parse(Textfeld1, Textfeld2, Liste, ...) gemacht, die alle Werte aus der GUI überprüft und entsprechend true oder false liefert. Wenn true herauskommt, soll es gespeichert werden und wenn nicht soll ein Fehler geworfen werden.

Tut mir leid, dass ich hier etwas schwer von Begriff bin und Grüße,
Naryxus
 
Nur mal zu folgenden Teil:
Ich hätte im Modell jetzt eine Methode parse(Textfeld1, Textfeld2, Liste, ...) gemacht, die alle Werte aus der GUI überprüft und entsprechend true oder false liefert.

Wenn dann eher ohne Textfeld (JTextField bzw. TextField), da GUI Komponenten nichts im Model verloren haben. Also dann eher eine Methode
Code:
parse(String text1, String text2, Liste,...)
evtl. sogar mit Array:
Code:
parse(String..., Liste)
 
Ich glaube was du suchst ist eine Combobox. Schau dich mal nach Combobox mit Autocomplete um, gabs hier im Forum vor kurzem einen Post dazu.
 
Du solltest dein Design mal überdenken.
Mach dir zunächst einmal gedanken, was du wirklich benötigst und teste diese Funktionen mal in einem seperaten kleinen Programm.
Es macht schlichtweg keinen Sinn, irgentein MVC Konstrukt mit JLists zu basteln, wenn man nicht mal vorher eine JList mit nem DefaultListModel zum laufen gebracht hat um zumind. die offensichtlichsten Funktionalitäten dieses Konstrukts zu verstehen.
Das ganze danach in dein Programm zu übernehmen ist dann nicht das Problem.
Aber im CodeGewusel nach Fehlern zu suchen ohne die grundsätzliche Funktionsweise kennengelernt zu haben ist wohl eher destruktiv.
Frei nach dem Motto, "Warum soll ich mit dem Haareföhnen warten, bis ich aus der Wanne raus bin...*britzel*"

Es sind Feiertage, nimm dir die Zeit, es lohnt sich.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

Neue Themen


Zurück
Oben