Hi,
schaue mir derzeit das MVC-Pattern an und habe 2 Fragen dazu. Beispielhaft eine simple GUI, welche nur aus einem Eingabefeld, einem Label und einem Button besteht. Gibt man in das Feld eine Zahl ein und betätigt den Button, so erscheint die Zahl im Label.
1) Das Model enthält ja die ganze Programmlogik und soweit ich verstanden habe auch die Daten. Angenommen ich ändere den Wert des Eingabefeldes, dann muss dieses auch im Modelobjekt festgehalten werden oder? Dann würde es ja im Endeffekt gar keine Aufrufe auf die Componenten alla Componente.getText() geben. Stattdessen holt man sich alles aus dem Model?!
2) Woher weiss die View genau, welcher Wert sich geändert hat?
Ich habe mal zwei Lösungsvarianten skizziert:
Fall 1) View ist Observer und stellt die Methode update(Model o) bereit. Ich habe bei jeder Änderung somit Zugriff auf das komplette Model Objekt. Ist es dann üblich, dass man alle Werte aktualisiert (unsere GUI hat jetzt z.B. 5 JLabel anstatt dem einen oben), auch wenn eigentlich nur ein Wert geändert worden ist?
Oder gibt man dem Objekt mit, welche Werte sich geändert haben z.B. in einem Array, welcher die Elemente hält, welche sich geändert haben?
Vorteil: Nur eine Schnittstelle
Nachteil: Ziemlicher Overhead
Fall 2) View ist ebenfalls Observer und stellt aber anstatt einer update Methode für jedes Feld, was sich ändern kann eine Methode bereit. Zum Beispiel updateLabelInfo(Model o), updateLabelSize(Model o). Das Model ruft dann dementsprechend diese Methode auf und die View weiss dann auch genau, welches Element sich genau ändern muss?
Vorteil: Klare Zuordnung möglich (geringer Overhead)
Nachteil: Ziemlich viel Schnittstellenimplementierung
Bin gespannt auf Eure Antworten
VG Rolli
schaue mir derzeit das MVC-Pattern an und habe 2 Fragen dazu. Beispielhaft eine simple GUI, welche nur aus einem Eingabefeld, einem Label und einem Button besteht. Gibt man in das Feld eine Zahl ein und betätigt den Button, so erscheint die Zahl im Label.
1) Das Model enthält ja die ganze Programmlogik und soweit ich verstanden habe auch die Daten. Angenommen ich ändere den Wert des Eingabefeldes, dann muss dieses auch im Modelobjekt festgehalten werden oder? Dann würde es ja im Endeffekt gar keine Aufrufe auf die Componenten alla Componente.getText() geben. Stattdessen holt man sich alles aus dem Model?!
2) Woher weiss die View genau, welcher Wert sich geändert hat?
Ich habe mal zwei Lösungsvarianten skizziert:
Fall 1) View ist Observer und stellt die Methode update(Model o) bereit. Ich habe bei jeder Änderung somit Zugriff auf das komplette Model Objekt. Ist es dann üblich, dass man alle Werte aktualisiert (unsere GUI hat jetzt z.B. 5 JLabel anstatt dem einen oben), auch wenn eigentlich nur ein Wert geändert worden ist?
Oder gibt man dem Objekt mit, welche Werte sich geändert haben z.B. in einem Array, welcher die Elemente hält, welche sich geändert haben?
Vorteil: Nur eine Schnittstelle
Nachteil: Ziemlicher Overhead
Fall 2) View ist ebenfalls Observer und stellt aber anstatt einer update Methode für jedes Feld, was sich ändern kann eine Methode bereit. Zum Beispiel updateLabelInfo(Model o), updateLabelSize(Model o). Das Model ruft dann dementsprechend diese Methode auf und die View weiss dann auch genau, welches Element sich genau ändern muss?
Vorteil: Klare Zuordnung möglich (geringer Overhead)
Nachteil: Ziemlich viel Schnittstellenimplementierung
Bin gespannt auf Eure Antworten
VG Rolli