[MVC] Objekt bearbeiten

UnkiDunki

Bekanntes Mitglied
Hi,

ich formuliere das ganze noch mal um:

Ich möchte einen in einer Übersichtstabellen ausgewählten Kunden in einem Dialog bearbeiten...
Jetzt stell sich mir die Frage, wie ich nach dem MVC-Konzept, das Laden bzw. das Setzen der Kundendaten auf die Textfelder realisiere und ein potentielles Speichern meiner Änderungen umsetze...

Bisher habe ich es so, dass ich in der View zwei Methoden habe:

1.) Eine Methode, die sich nach dem Öffnen des Dialoges aus dem übergebenen Model das Kundenobjekt geben lässt und alle Daten dieser Person nacheinander auf die entsprechenden Textfelder setzt. Sprich:
Java:
tfName.setText(model.getCustomer()->getName())

und 2.) Nach Klick auf den Save-Button der Controller in der View eine apply-Methode aufruft, die umgekehrt, alle Inhalte der Textfelder zurück aufs Kundenobjekt im Model setzt und danach dieses Objekt mit seiner save-Methode in die Datenbank schreibt.

Frage: Ist das so i.O.? Ich habe nämlich gelesen, dass man jegliche Änderungen in den Textfeldern zB direkt in das Model schreibt. Ist das korrekt oder könnte ich es auf diese Weise auch realisieren?

Bei Punkt 2 wird ja auch der Umweg über den Controller gemacht, was natürlich logisch richtig ist, aber praktisch könnte man ja nach der Eingabe in der View direkt die eigene apply-Methode aufrufen, also wozu eigentlich über den Controller gehen? Nur aufgrund der Struktureinhaltung oder wo habe ich da einen Denkfehler?!?

Vielen Dank für Kritik und Anregungen :)
 
Zuletzt bearbeitet:

UnkiDunki

Bekanntes Mitglied
Ich hatte das im ersten Versuch ziemlich undeutlich oder verworren geschildert, was ich nun hoffentlich mit der Bearbeitung des Threads ein wenig verbessern konnte, so dass ihr euch meinem Problem bzw. meiner Frage vielleicht noch mal widmen könntet :) Wäre super.
 

Michael...

Top Contributor
zu 2. Deine View sollte von der Datenbank eigentlich gar nichts wissen. Die apply Methode gehört also eher in den Controller.
Wenn es darum geht Änderungen in der View im Model nachzuziehen, kann dies auch direkt ohne Umweg über den Controller passieren. Bei MVC ist die Verbindung Model zu View ja bidirektional.
 

UnkiDunki

Bekanntes Mitglied
Hi,

meine View weiss aber doch garnichts von der Datenbank, nur vom Model bzw. vom Kundenobjekt in dem Falle...
Die apply-Methode in der View setzt ja nur die Eigenschaften aus den Textfeldern auf die entsprechenden Eigenschaften des Objektes...

Wenn ich die apply-Methode im Controller mache, stellt sich die Frage wie ich auf die ganzen Textfelder, etc in der View zugreifen soll?
Alle public machen oder etwa für jede Componente Getter und Setter? Das wird bei einem gewissen Unfang ja recht viel...
 

Michael...

Top Contributor
meine View weiss aber doch garnichts von der Datenbank
Sorry, so hatte ich es ursprünglich verstanden.

Die View darf ja durchaus das Model ändern.

Wenn man jetzt strikt nach MVC vorgehen würde, würde bei einem Klick auf einen Save Button z.B. ein ActionListener anspringen (der evtl. direkt vom Controler implementiert wird) der Controler sagt dann zur View (per Methodenaufruf an der Referenzvariablen): Übertrage die Änderungen aus dem Textfeld auf das Model um dann anschliessend die neuen Werte aus dem Model zu erfragen und in die Datenbank zu speichern.
 

UnkiDunki

Bekanntes Mitglied
Sorry, so hatte ich es ursprünglich verstanden.

Ne, musst dich nicht entschuldigen. War mein Fehler. Hatte das oben nicht eindeutig genug geschildert.

Wenn man jetzt strikt nach MVC vorgehen würde, würde bei einem Klick auf einen Save Button z.B. ein ActionListener anspringen (der evtl. direkt vom Controler implementiert wird) der Controler sagt dann zur View (per Methodenaufruf an der Referenzvariablen): Übertrage die Änderungen aus dem Textfeld auf das Model um dann anschliessend die neuen Werte aus dem Model zu erfragen und in die Datenbank zu speichern.

So hatte ich es ja auch bei Punkt 2 geschrieben:

UnkiDunki hat gesagt.:
und 2.) Nach Klick auf den Save-Button der Controller in der View eine apply-Methode aufruft, die umgekehrt, alle Inhalte der Textfelder zurück aufs Kundenobjekt im Model setzt und danach dieses Objekt mit seiner save-Methode in die Datenbank schreibt.

Mit "und danach dieses Objekt... in die DB schreibt" habe ich den Controller als "ausführendes Organ" gemeint.
Mein Kundenobjekt besitzt bereits eine eigene save-Methode, die Änderungen direkt in die DB schreibt.
Dann müsste es ja mehr oder weniger dann so aussehen:

Java:
// methode im controller, aufgerufen durch actionlistener
view.applyChanges();
model.getCustomer().save();

"Ginge" das dann so? Mehr oder weniger MVC-konform? :)
 

Michael...

Top Contributor
Gehen tut das schon.

Ich würde allerdings das Model und das Kundenobjekt von der Datenbank unbehelligt lassen, sonst muss man, wenn man später evtl. die DB austauscht oder deren Design ändert die beiden Klassen wieder anpassen.
 

UnkiDunki

Bekanntes Mitglied
Ahh ok :) Guter Einwand. Also die Datenbankaufgaben in den Controller auslagern?
Wobei ich das aber nur teilweise nachvollziehen kann. Das Model hat ja in dem Sinne erst mal nichts mit der DB zu tun, da es nur das aktuelle Kundenobjekt beinhaltet, welches ja für sich die Datenbankaktionen durchführt und ob man jetzt bei Änderungen der DB den Controller anpasst oder die Kundenklasse bleibt doch eigentlich dasselbe. Es ist sogar ratsamer, wie ich finde, das komplett in der Kundenklasse zu lassen, denn so ändert man es bei DB-Änderungen wirklich nur an einer Stelle und nicht bei zig Controllern, falls man an anderer Stelle auch mit Kundenobjekten arbeitet, oder sehe ich das falsch?

Dachte, dass ich das mal geschickt gelöst hätte, dass ich meiner Kundenklasse gleich alle entsprechenden Methoden implementiert habe, also retrieve(kundenID), save() [bei bereits vorhandener kundenID update() sonst insert()]...

Das war ein Fehler?
Danke übrigens für dein Engagement! :)
 

Michael...

Top Contributor
Ich würde da eine eigene Klasse verwenden, die mit der DB kommuniziert, die dann von den Controlern (hatte glaube ich noch nie mehr als ein Controler Klasse) verwendet wird.
Aber wenn Kundenobjekt die einzige Klasse ist, die was mit der DB zu tun hat, kann man das auch so machen, man muss ja nicht immer alles streng nach Vorschrift machen.
Danke übrigens für dein Engagement! :)
Hab gerade keinen Bock auf Arbeiten ;-) und es eh nicht allzu viel los.
 

UnkiDunki

Bekanntes Mitglied
Ich würde da eine eigene Klasse verwenden, die mit der DB kommuniziert, die dann von den Controlern (hatte glaube ich noch nie mehr als ein Controler Klasse) verwendet wird.

Ok, klar mit ner extra Klasse, an die Kundenklasse gebunden, würde das auch gehen. Direkt im Controller wäre ja schlecht, da man ja pro View einen Controller haben sollte. Das Model darf man gerne teilen, was ich übrigens tue, da ich vor dem Berarbeitungsdialog eine View mit einer Kundenübersicht als Tabelle habe. Bei Doppelklick auf einen Kunden setze ich 1.) auf das geteilte Model den angeklickten Kunden (ich instanziiere ein Kundenobjekt mit der aus der Tabelle gewonnenen ID
Java:
model.setCustomer(new Customer(id))
und öffne dann 2.) den Dialog zum Editieren, wo sich dann die View über das Model den Kunden holt und dann die Textfelder entsprechend belegt (sollte natürlich dann vom Controller initiiert sein das Ganze)... Auch ne Frage, ob das so gemacht wird :D

Hab gerade keinen Bock auf Arbeiten ;-) und es eh nicht allzu viel los.

Na dann... ;)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
_user_q Objekt.setSelected(false), wenn es nicht mehr fokussiert wird AWT, Swing, JavaFX & SWT 2
B mit maus Objekt bewegen AWT, Swing, JavaFX & SWT 3
U Was genau ist das Objekt einer affinentransformation? AWT, Swing, JavaFX & SWT 1
U Was genau ist ein Shape-Objekt? AWT, Swing, JavaFX & SWT 3
DonBronson Objekt bewegen (Mausposition) AWT, Swing, JavaFX & SWT 3
B JavaFX Prüfen ob ein Objekt sich mehrmals in einer Liste befindet AWT, Swing, JavaFX & SWT 5
DonBronson Gezeichnetes Objekt verschwindet nachdem erneut gezeichnet wird AWT, Swing, JavaFX & SWT 8
U Was ist ein Shape, also klar ein Objekt, aber was ist damit gemeint (Graphics2d)? Und was sidn affinetransformationen AWT, Swing, JavaFX & SWT 1
Jose05 zugreifen auf ein Objekt eines GridPanes AWT, Swing, JavaFX & SWT 0
Kohl Jedes Objekt einer JTable um ein Zeichen verkürzen AWT, Swing, JavaFX & SWT 7
C Objekt an paintComponent weitergeben AWT, Swing, JavaFX & SWT 1
M Swing Objekt Array in GUI ausgeben AWT, Swing, JavaFX & SWT 1
A Objekt von einem Window erstellen? AWT, Swing, JavaFX & SWT 8
F Java FX Von der Fxml Datei zum Objekt AWT, Swing, JavaFX & SWT 8
M Swing Durch Usereingabe neues Objekt AWT, Swing, JavaFX & SWT 2
K Color-Objekt erzeugen in CMYK AWT, Swing, JavaFX & SWT 2
T Frage zu GUI - Button soll Objekt erfassen AWT, Swing, JavaFX & SWT 2
A Swing Null Pointer Exception obwohl Objekt initialisiert AWT, Swing, JavaFX & SWT 21
J gezeichnetes Objekt anklicken AWT, Swing, JavaFX & SWT 10
thet1983 JavaFX TableView Objekt Daten anzeige AWT, Swing, JavaFX & SWT 2
Z Swing Variable eines Objekt aus Hashmap in JList anzeigen AWT, Swing, JavaFX & SWT 1
M Mouse Click Event ohne ein JComponent Objekt AWT, Swing, JavaFX & SWT 3
L JavaFX als eigenes Objekt AWT, Swing, JavaFX & SWT 3
M [JavaFX] Objekt um Zentrum rotieren (Camera) AWT, Swing, JavaFX & SWT 1
E JavaFx Screne mehr als ein "Objekt" zuordnen ? AWT, Swing, JavaFX & SWT 2
F 2D-Grafik Objekt durch Einwirkung einer Kraft im Raum bewegen AWT, Swing, JavaFX & SWT 14
J Bilder als Variable an einem Objekt speichern AWT, Swing, JavaFX & SWT 3
B Event Handling MouseListener Behält seine Variablen, auch wenn ich ein neus Objekt erstelle AWT, Swing, JavaFX & SWT 2
C Graphics Objekt in Zeitschleife zeichnen AWT, Swing, JavaFX & SWT 4
P Event Handling Anfängerfrage: ActionEvent bekommt kein Zugriff auf Objekt AWT, Swing, JavaFX & SWT 3
R Array aus einem Objekt auslesen AWT, Swing, JavaFX & SWT 4
V 2D-Grafik Frage zum Graphics Objekt AWT, Swing, JavaFX & SWT 2
A AWT TTF-Datei zu Font-Objekt finden? AWT, Swing, JavaFX & SWT 5
S Objekt durch Tasteneingabe mehrmals drehen AWT, Swing, JavaFX & SWT 9
E Swing Objekt zu Position (Point) bewegen AWT, Swing, JavaFX & SWT 2
T 3D-Grafik (Java3D) Aus einem Objekt einer Szene (Würfel, Ebene) die wichtigen Randkoordinaten auslesen AWT, Swing, JavaFX & SWT 3
K Action Listener implementieren über Objekt AWT, Swing, JavaFX & SWT 14
Java-Insel LayoutManager Ein GridBagLayout-Objekt für mehrere Panels? AWT, Swing, JavaFX & SWT 2
V Persistentes Objekt laden Progressbar AWT, Swing, JavaFX & SWT 7
F Canvas Objekt außerhalb des Frames zeichnen AWT, Swing, JavaFX & SWT 3
Furtano AWT paint braucht ein Graphics Objekt ? AWT, Swing, JavaFX & SWT 2
propra Schnittpunkt zwischen Objekt und Kante finden AWT, Swing, JavaFX & SWT 24
L Graphics Objekt - aus anderer Klasse aufrufen / übergeben AWT, Swing, JavaFX & SWT 5
S Objekt einmal laden zweimal anzeigen 3d AWT, Swing, JavaFX & SWT 6
I Swing Zugriff auf ein Objekt AWT, Swing, JavaFX & SWT 2
F Nur ein Objekt auf Canvas neu zeichnen AWT, Swing, JavaFX & SWT 4
R Möglichkeiten ein abgeleitetes Objekt zu erzeugen AWT, Swing, JavaFX & SWT 4
P Swing Wie bekomme ich eine Referenz auf ein Objekt das im EDT erzeugt wird? Und anderes... AWT, Swing, JavaFX & SWT 8
T Objekt in Kreisbahn bewegen AWT, Swing, JavaFX & SWT 5
B Zeichnen von Bildern auf JPanel aus eigenem Objekt AWT, Swing, JavaFX & SWT 19
V Parameter an Runnable-Objekt übergeben AWT, Swing, JavaFX & SWT 6
Dit_ Objekt mit ActionEvent übergeben AWT, Swing, JavaFX & SWT 2
S Unterscheiden ob ein Graphics-Objekt von einer JComponent oder einem BufferedImage kommt..? AWT, Swing, JavaFX & SWT 4
L Swing Auf unabhängiges Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 8
A SWT SWT - Unbekannte Fläche (Objekt) erscheint im Composite AWT, Swing, JavaFX & SWT 6
D Objekt mit Button erstellen und mit anderem Button verwenden AWT, Swing, JavaFX & SWT 4
P Objekt kopieren AWT, Swing, JavaFX & SWT 2
M Graphics-Objekt aktualisiert sich nicht AWT, Swing, JavaFX & SWT 2
O Swing JTable Colum Objekt AWT, Swing, JavaFX & SWT 6
Dit_ Ein Kreis als Graphics2D oder als Ellipse2D Objekt AWT, Swing, JavaFX & SWT 19
M Objekt im ActionListener ansprechen AWT, Swing, JavaFX & SWT 3
C Wie komme ich an ein Objekt aus einem JTree? AWT, Swing, JavaFX & SWT 10
R FlowLayout: 1 Objekt pro Zeile AWT, Swing, JavaFX & SWT 5
D Objekt (Map) in Textfeld ausgeben AWT, Swing, JavaFX & SWT 10
kirchrath Swing Aus ActionEvent Objekt herausfinden auf dem er ausgeführt wurde AWT, Swing, JavaFX & SWT 4
E Graphics2D: altes Objekt löschen, wenn repaint aufgerufen wird AWT, Swing, JavaFX & SWT 7
S Objekt wird während Endlosschleife nur einmal bewegt AWT, Swing, JavaFX & SWT 2
W Objekt-array als Raster visualisieren AWT, Swing, JavaFX & SWT 3
F Herausfinden, auf welchem Objekt der Fokus liegt AWT, Swing, JavaFX & SWT 2
G Tooltip Text für ein Shape Objekt AWT, Swing, JavaFX & SWT 2
D DnD ganzer Objekte(Objekt erstellen) AWT, Swing, JavaFX & SWT 2
G Wie ziehe ich ein Objekt aus einer JList? AWT, Swing, JavaFX & SWT 7
O JTable mit objekt-daten füllen AWT, Swing, JavaFX & SWT 4
B in jList feld aus einem objekt anzeigen AWT, Swing, JavaFX & SWT 2
R SWT color Objekt AWT, Swing, JavaFX & SWT 4
K Graphics-Objekt zeichnet nicht alle Bilder AWT, Swing, JavaFX & SWT 3
N Graphics Objekt "puffern" AWT, Swing, JavaFX & SWT 7
L Objekt in JComboBox einfügen AWT, Swing, JavaFX & SWT 2
S JComboBox, ein Renderer und das selektierte Objekt AWT, Swing, JavaFX & SWT 4
R Graphics Objekt ändern AWT, Swing, JavaFX & SWT 11
B actionPerformed reagiert nicht auf das Canvas-objekt AWT, Swing, JavaFX & SWT 11
J DocumentListener uebergibt Objekt; wie in JTextfield casten? AWT, Swing, JavaFX & SWT 3
B Objekt in "actionPerformed" erzeugen und nutzen AWT, Swing, JavaFX & SWT 3
P JSpinner Objekt anstatt Zahlen sollen man Namen auswählen AWT, Swing, JavaFX & SWT 2
B Ein Image Objekt drehen? AWT, Swing, JavaFX & SWT 2
G Referenz über MenuItem aus ActionListener auf das Objekt AWT, Swing, JavaFX & SWT 8
lin Welches Objekt für einen About-Dialog verwenden? AWT, Swing, JavaFX & SWT 2
R Selectable Graphics Objekt gesucht. AWT, Swing, JavaFX & SWT 5
Wildcard FontMetrics ohne Graphics-Objekt AWT, Swing, JavaFX & SWT 13
S objekt kann methode der aufrufenden klasse nicht aufrufen AWT, Swing, JavaFX & SWT 2
Y Objekt in JFrame AWT, Swing, JavaFX & SWT 3
M Objekt in TableCellRenderer packen, warum ein Fehler? AWT, Swing, JavaFX & SWT 2
K Objekt in eine bestimmte Zelle eines JTables legen AWT, Swing, JavaFX & SWT 3
D getResource() bei Image-Objekt AWT, Swing, JavaFX & SWT 9
A Problem mit dem graphics-Objekt AWT, Swing, JavaFX & SWT 8
D in neues Image-Objekt zeichnen AWT, Swing, JavaFX & SWT 3
E warum erkennt er das objekt nicht???? AWT, Swing, JavaFX & SWT 4
G Fehler bei BasicStroke Objekt AWT, Swing, JavaFX & SWT 2
G Zurgriff auf Objekt über event.getComponent AWT, Swing, JavaFX & SWT 3
R mehrere buttons mit forschleife kreieren und individuell bearbeiten AWT, Swing, JavaFX & SWT 1

Ähnliche Java Themen

Neue Themen


Oben