Swing Grundsätzliche Fragen zu MVC

  • Themenstarter Themenstarter Camino
  • Beginndatum Beginndatum
C

Camino

Gast
Hallo,

nachdem ich erstmal munter drauflos programmiert habe und meine Swing-Anwendung immer umfangreicher und unübersichtlicher geworden ist, versuche ich nun, das Ganze mal mehr nach dem MVC-Prinzip zu strukturieren. Hab mir das Grundprinzip zu MVC nun auch angelesen. Dazu hab ich nun ein paar grundsätzliche Fragen. Die Anwendung handelt sich um eine Verwaltung von u.a. Personendaten, die in einer Datenbank abgelegt werden.

1.) Wenn ich nun mehrere Bereiche in der Datenbank bzw. Anwendung habe, z.B. Personen, Anträge, Semesterdaten..., lege ich mir dann als Struktur jeweils zu den Bereichen ein Package an, mit den Unterpaketen oder Klassen model, view und control? Oder lege ich mir die Packages model, view und control an und dort dann die Unterbereiche (Personen, Anträge...)? Oder ist das egal und beides ok, je nachdem, wie es mir besser gefällt?

2.) Ich hab eine Klasse Person mit allen Datenfeldern aus der Datenbank (Vorname, Nachname, Geburtsdatum, Anschrift...), und auch mit den dazugehörigen Getter- und Setter-Methoden. Gehört diese Klasse Person auch in den Bereich 'model', also zum Datenmodell? Wenn ich nun aus allen oder mehreren Datensätzen aus der Datenbank Personenobjekte erstelle und in einer ArrayList sammel, wo wird dann diese ArrayList untergebracht? Wird dazu am besten eine eigene Klasse im Model-Bereich angelegt, in welcher die ArrayList gefüllt, an die View weitergeleitet wird und vom Controller bearbeitet wird bzw. dann auch wieder in die DB zurückgeschrieben wird? Ich hab also im Model-Bereich die Klasse Person und eine Klasse mit der ArrayList? Oder gehört diese ArrayList eher in den Controller oder gleich in die View?

Das waren erst mal meine Fragen, um grundsätzlich die MVC-Struktur zu verstehen und anzuwenden.

Vielen Dank für eure Hilfe und viele Grüsse
Camino
 
Mir ist noch 'ne Frage eingefallen:

3.) Wenn ich nun für die gleiche Sammlung von Datensätzen (ArrayList mit Personobjekten) unterschiedliche Ansichten (Views) haben möchte, wie gehe ich da vor?
Speziell jetzt in meiner Anwendung hab ich z.B. die aus der Datenbank geholten Personendaten einmal in einem Personen-Suchdialog in einer Tabelle, die ich nach Vor-, Nachnamen oder Matrikelnummer filtern kann. Dort brauche ich auch aus den Datensätzen nur diese 3 Daten. Bisher hab ich dafür ein eigenes TableModel erstellt.
Und ein anderes Mal in einer Eingabemaske, in der zwar nur jeweils 1 Datensatz angezeigt werden kann, es soll aber mit 2 Buttons innerhalb der Datensätze navigiert d.h. durchgeblättert werden können.

Für beide Fälle könnte ich ja auf die gleiche ArrayList zugreifen und mir die jeweiligen Daten in der View anzeigen lassen. Oder brauche ich dafür auch zwei verschiedene Model, weil das eine eine JTable ist und das andere ein Eingabeformular.
 
1.) Wenn ich nun mehrere Bereiche in der Datenbank bzw. Anwendung habe, z.B. Personen, Anträge, Semesterdaten..., lege ich mir dann als Struktur jeweils zu den Bereichen ein Package an, mit den Unterpaketen oder Klassen model, view und control? Oder lege ich mir die Packages model, view und control an und dort dann die Unterbereiche (Personen, Anträge...)? Oder ist das egal und beides ok, je nachdem, wie es mir besser gefällt?
Sicher, dass du MVC Prinzip verstanden hast? 🙂 Model, View und Control sind keine Packages, sondern Komponenten. Du kannst dir zwar ein Package "data" anlegen, wo du dann die Klassen für Personen, Anträge etc abspeicherst, aber mit MVC direkt haben die nicht viel zu tun.

2.)Wenn ich nun aus allen oder mehreren Datensätzen aus der Datenbank Personenobjekte erstelle und in einer ArrayList sammel, wo wird dann diese ArrayList untergebracht? Wird dazu am besten eine eigene Klasse im Model-Bereich angelegt, in welcher die ArrayList gefüllt, an die View weitergeleitet wird und vom Controller bearbeitet wird bzw. dann auch wieder in die DB zurückgeschrieben wird?
Du kannst entweder im Model
Code:
List<Person>
haben oder du erstellst eine Klasse, die für Verwaltung von Personen zuständig ist (wo dann deine Liste ist) und erstellst davon eine Instanz im Model.
Außerdem wird die Liste nicht an View weitergeleitet, sonder View bezieht die Daten aus dem Model.

Oder gehört diese ArrayList eher in den Controller oder gleich in die View?
Definitiv nicht, Daten solltest du lieber im Model halten.

3.) Wenn ich nun für die gleiche Sammlung von Datensätzen (ArrayList mit Personobjekten) unterschiedliche Ansichten (Views) haben möchte, wie gehe ich da vor?
...
Naja. Dein Model bleibt unverändert. Du machst 2 Views mit den dazugehörenden Controllern, aber die greifen auf das selbe Model zu. Außerdem brauchst du jetzt nicht zwingen 2 Views dazu, sondern kannst es auch in einem unterbringen.
 
Sicher, dass du MVC Prinzip verstanden hast? 🙂 Model, View und Control sind keine Packages, sondern Komponenten. Du kannst dir zwar ein Package "data" anlegen, wo du dann die Klassen für Personen, Anträge etc abspeicherst, aber mit MVC direkt haben die nicht viel zu tun.
Hmm, bei den Packages ging es mir eher um die Struktur, wie und wo ich die Komponenten anlege, da es in der Anwendung mehrere verschiedene Bereiche gibt, die alle ihre Models, Views und Controller haben. Hat zwar nicht direkt was mit dem MVC-Prinzip zu tun, aber dient der Übersichtlichkeit.


Du kannst entweder im Model
Code:
List<Person>
haben oder du erstellst eine Klasse, die für Verwaltung von Personen zuständig ist (wo dann deine Liste ist) und erstellst davon eine Instanz im Model.
Außerdem wird die Liste nicht an View weitergeleitet, sonder View bezieht die Daten aus dem Model.
OK, dann heisst das, dass z.B. das Control bestimmt, welcher Datensatz aus dem Model (Liste) in der View (Eingabeformular) angezeigt wird, z.B. über eine Methode im Model wie
Code:
getPerson(index)
, welche dann ein Person-Objekt zurückliefert und die Daten vom View im Formular angezeigt werden...


Naja. Dein Model bleibt unverändert. Du machst 2 Views mit den dazugehörenden Controllern, aber die greifen auf das selbe Model zu. Außerdem brauchst du jetzt nicht zwingen 2 Views dazu, sondern kannst es auch in einem unterbringen.
OK, das mit dem nur einen Model hab ich mir irgendwie gedacht, aber warum nur 1 View, wenn ich verschiedene Ansichten der Daten habe? Einmal einen Dialog, der mir 3 Datenfelder der Datensätze (komplette Liste des Models) in Tabellenform anzeigt, welche dann gefiltert werden können, und zum zweiten das Eingabeformular, in dem immer nur 1 Datensatz komplett angezeigt wird, aber durch die Liste geblättert werden kann.

Zum MVC-Pattern kannst du mal die FAQ besuchen und die entsprechenden Beiträge lesen.
OK, werde ich mir anschauen...

Danke euch beiden erst mal für die Antworten...
 
MVC ist nur ein Paradigma für deine GUI. Darüber hinaus musst du dir noch Gedanken machen wie du zu deiner Datenbank kommst und die Daten speicherst... Indem Link ist ein Bsp. dabei.
 
MVC ist nur ein Paradigma für deine GUI. Darüber hinaus musst du dir noch Gedanken machen wie du zu deiner Datenbank kommst und die Daten speicherst... Indem Link ist ein Bsp. dabei.
Ja, danke. Werde ich mir mal genauer anschauen. Um das MVC für meine GUI ging es mir ja auch. Wie ich schon geschrieben hatte, läuft die Anwendung ja schon so einigermassen (ist aber immer noch inder Entwicklung). Mein Problem war nur, dass ich mir wohl zu Beginn zu wenige Gedanken über die Programmstruktur gemacht habe und erstmal einfach drauf los programmiert habe. Jetzt wird mir das Ganze etwas zu chaotisch und unübersichtlich und ich möchte das besser strukturieren. Ist halt immer mehr dazugekommen und ich hatte dann irgendwann angefangen, das in Packages zu gliedern. Das mit der Datenbank funktioniert schon. Ist aber auch nicht so besonders gut gelöst.

Viele Grüsse
Camino
 
Indem Link ist ein Bsp. dabei.
Hey cool. Ich hab mir den Java-Code aus dem Beispiel mal ausgedruckt, damit ich das übersichtlicher vor mir habe und sehen kann, was womit zusammenhängt. Dann hab ich mal versucht, das in meinem Projekt umzusetzen. Hab also ein Model und einen Controller angelegt, die View war ja schon vorhanden (ist halt ein bisschen umfangreich und besteht aus mehreren Modulen/Klassen). Aber jetzt kann ich mit den zwei JButtons in der View (< und >) durch die Datensätze blättern und mir die jeweiligen Personendaten im Eingabeformular anzeigen lassen. Bin damit schonmal einen grossen Schritt weiter und kann jetzt dort hoffentlich weiter dran arbeiten. DANKE! Falls noch Fragen auftauchen, melde ich mich nochmal...

Viele Grüsse
Camino
 

Neue Themen


Zurück
Oben