MVC - Vererbung

schnepfo

Mitglied
hallo,

ich hab in einem Projekt das MVC Design Pattern angewendet, jedoch stoße ich mittlerweile auf meine grenzen.

Kurze Beschreibung:

Ich habe eine MainApplication (View) die das Hauptfenster darstellt.
Ich habe einen Controller der die handlungen steuert und ein Model.

Weiters sind jedoch auf der MainApplication lauter Buttons, und bei jedem Button soll ein neues Formular angezeigt werden, wobei sich die Formulare in ihrem Aussehen, den daten und den Funktionen unterscheiden.

Nun zu meiner Frage:

Wie kann ich hier Vererbung gut nutzen?

Denn ich habe jetzt die Superklassen View,Controller und Model.

Beim Model funktioniert das alles sehr gut, da nutze ich nur die zentrale Klasse.

Jedoch beim View muss ich immer eine Subklasse machen die von View erbt. Soweit so gut. Nur muss ich dem Controller auch immer die View übergeben.

Ich dachte zuerst daran, dass ich einfach die Superklasse View übergebe und diesem Objekt dann das Objekt der Subklasse zuweise. Jedoch geht mir dabei die ganze Funktionalität der Subklasse verloren, da ich ja nur die Methoden nutzen kann die ich auch in der Superklasse habe.

Deshalb musste ich auch für jeden einzelnen Controller eine eigene Klasse machen,die von Controller erbt.

Das was die Subklassen erben, ist jedoch nicht sehr viel, da nur 1-2 Methoden bei allen gleich sind.

Habe ich einen Denkfehler oder ist das MVC Konzept bei solchen Dingen nur so einzusetzen?

lg
 
G

Gonzo17

Gast
Ich dachte zuerst daran, dass ich einfach die Superklasse View übergebe und diesem Objekt dann das Objekt der Subklasse zuweise. Jedoch geht mir dabei die ganze Funktionalität der Subklasse verloren, da ich ja nur die Methoden nutzen kann die ich auch in der Superklasse habe.


Also nach meinem Verständnis ist hier das Problem. Wieso möchtest du im Controller auf Methoden vom View zugreifen? Was genau willst du machen? Ich würde das nämlich eher andersherum sehen. Der View kennt seinen Controller und wenn ein Benutzer zB auf einen Button klickt und Funktion x aufgerufen werden soll, dann fragt der View beim Controller an, der führt die Funktion x aus und liefert das Ergebnis zurück bzw schreibt es ins Model. Wenn der View dann als Observer auf Änderungen beim Model wartet, dann kriegt er auch automatisch mit, wenn sich etwas ändert.
 

schnepfo

Mitglied
Nach meinem Verständnis hat die View Kenntnis über das Model und den Controller .

Auch ZB in Wikipedia so definiert: Die Präsentationsschicht ist für die Darstellung der benötigten Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennt sowohl ihre Steuerung als auch das Modell, dessen Daten sie präsentiert, ist aber nicht für die Weiterverarbeitung der vom Benutzer übergebenen Daten zuständig.

Also bei mir ist es so das der Controller den Programablauf steuert, dh.: Wird ein Button gedrückt, wird dies durch den Controller erfasst, der teilt der View mit was angezeigt werden soll, und dem Model was gespeichert werden soll, und übernimmt selbt die verarbeitung der Daten.

So hab ichs zumindest gelernt und auch verstanden...

lg
 
G

Gonzo17

Gast
Nochmal zurück zum ursprünglichen Problem. Da du ja schon auf Wikipedia verweist, hier auch noch ein Ausschnitt.

Deshalb musste ich auch für jeden einzelnen Controller eine eigene Klasse machen,die von Controller erbt.

Wikipedia hat gesagt.:
Die Steuerung verwaltet eine oder mehrere Präsentationen, nimmt von ihnen Benutzeraktionen entgegen, wertet diese aus und agiert entsprechend. Zu jeder Präsentation existiert eine Steuerung. Es ist die Aufgabe der Steuerung, Daten zu manipulieren. Die Steuerung entscheidet aufgrund der Benutzeraktion in der Präsentation, welche Daten im Modell geändert werden müssen. Sie enthält weiterhin Mechanismen, um die Benutzerinteraktionen der Präsentation einzuschränken. Die Steuerung kann in manchen Implementierungen ebenfalls zu einem „Beobachter“ des Modells werden, um bei Änderungen der Daten den View direkt zu manipulieren.


Generell muss man das aber auch von einer anderen Seite sehen. Jedes (Design-)Pattern ist lediglich eine Art Denkanstoß, um seinem Code bestimmte Strukturen zu geben. Wie man es letztlich umsetzt kann man selbst entscheiden. Gerade MVC lässt ja viele Dinge offen, die man so oder eben so umsetzen kann. Es gibt bestimmt auch Fälle, die nur mit einem Controller arbeiten. Die Frage ist ja immer, was man machen möchte.

Wichtig finde ich nur, dass man im Zusammenhang mit MVC eben auch mal das Observer-Pattern versucht, das kann nämlich durchaus helfen.
 

Michael...

Top Contributor
Auch ZB in Wikipedia so definiert: Die Präsentationsschicht ist für die Darstellung der benötigten Daten aus dem Modell und die Entgegennahme von Benutzerinteraktionen zuständig. Sie kennt sowohl ihre Steuerung als auch das Modell, dessen Daten sie präsentiert, ist aber nicht für die Weiterverarbeitung der vom Benutzer übergebenen Daten zuständig.
Die View kennt den Controller nur indirekt z.b. über ein Interface
Controller "kennt" View und Model (konkret)
View "kennt" Model (konkret - kann aber auch abstrakt sein)
Model weiß dass es Views gibt (abstrakt)
View weiß, dass es einen Controller gibt (abstrakt)
Also bei mir ist es so das der Controller den Programablauf steuert, dh.: Wird ein Button gedrückt, wird dies durch den Controller erfasst, der teilt der View mit was angezeigt werden soll, und dem Model was gespeichert werden soll, und übernimmt selbt die verarbeitung der Daten.
Meiner Meinung sollte es für den Controller irrelevant sein, ob ein Button gedrückt oder eine JCheckBox selektiert oder... wurde.
Der ActionListener für den Button kann in der View implementiert sein, interpretiert das ActionEvent und ruft die passende (Interface)Methode des Controllers auf.

Deine Überlegung einer SuperView und SubViews die von Ihr erben, kommt mir etwas komisch vor und macht eigentlich keinen Sinn. Man könnte sich ggf. überlegen ein Interface View zu definieren, um die Kopplung noch loser zu gestalten. Man sollte es sich aber nicht unnötig schwer machen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Vererbung?! Allgemeine Java-Themen 15
temi Problem mit Aufrufreihenfolge bei Vererbung Allgemeine Java-Themen 3
MiMa Vererbung und Komposition?? Allgemeine Java-Themen 38
Kirby.exe Vererbung bei Generics Allgemeine Java-Themen 7
L Vererbung Verständnis Probleme Vererbung Allgemeine Java-Themen 2
W Generics + Vererbung Allgemeine Java-Themen 47
M Vererbung mithilfe von Bluej Allgemeine Java-Themen 3
M List -Tableview-Javafx-Vererbung Allgemeine Java-Themen 35
A Vererbung Selbstreferenzparameter Allgemeine Java-Themen 14
D Thema: Vererbung Ober-/Unterklassen Allgemeine Java-Themen 16
D Frage zu Vererbung Allgemeine Java-Themen 5
N Vererbung mit GUI Allgemeine Java-Themen 9
E Vererbung Countable mit Vererbung Allgemeine Java-Themen 6
J 2 Fragen zur Vererbung Allgemeine Java-Themen 5
T Javaklassen und vererbung Allgemeine Java-Themen 32
F Vererbung Allgemeine Java-Themen 5
Neumi5694 Vererbung Restriktive Vererbung Allgemeine Java-Themen 4
A Vererbung Übungsaufgabe Vererbung - Erstellung Klassenhierarchie Allgemeine Java-Themen 1
J Allgemeine Fragen zu Vererbung Allgemeine Java-Themen 1
kaoZ Generics und Vererbung Allgemeine Java-Themen 3
D Problem bei Vererbung abstrakter Klassen Allgemeine Java-Themen 6
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Super Klasse Vererbung Problem :/ Allgemeine Java-Themen 10
L Unabhängige Auslieferung bei Vererbung Allgemeine Java-Themen 20
C Enums und Vererbung Allgemeine Java-Themen 6
F Google Guice + Generics + Vererbung Allgemeine Java-Themen 5
D Unterschied Vererbung und Polymorphie? Allgemeine Java-Themen 4
K Vererbung ohne Basisklasse zu kennen Allgemeine Java-Themen 20
Da_Tebe ArrayList<xyz> Verschachtelung oder Vererbung? Allgemeine Java-Themen 6
faetzminator statische Variablen in Interface - Vererbung? Allgemeine Java-Themen 9
M OOP PropertyChangeListener - Vererbung oder Komposition? Allgemeine Java-Themen 5
S OOP Mehrfache Vererbung von abstrakten Klassen Allgemeine Java-Themen 7
G Designfrage Vererbung ja oder nein Allgemeine Java-Themen 9
S equals - Identität ändern bei Vererbung? Allgemeine Java-Themen 5
dayaftereh Vererbung Hilfe Allgemeine Java-Themen 2
D Vererbung, Reflection und automatischer Methodenaufruf Allgemeine Java-Themen 24
A PropertyChangeListener Vererbung Allgemeine Java-Themen 4
P DefaultTreeCellRenderer Vererbung Allgemeine Java-Themen 5
S Objekte die Objekte enthalten: Keine Vererbung Allgemeine Java-Themen 4
J Vererbung bei abstrakten Klassen Allgemeine Java-Themen 2
S Vererbung: Welche Methode wird verwendet? Allgemeine Java-Themen 9
L Checkstyle: Wann ist eine Methode für Vererbung entworfen? Allgemeine Java-Themen 13
S normale vererbung als interface Allgemeine Java-Themen 2
S statische Methoden und Vererbung Allgemeine Java-Themen 6
R Vererbung - doppelte Paint-Methode Allgemeine Java-Themen 4
R Vererbung mit Interface und Abstract Allgemeine Java-Themen 3
B Vererbung bei enums ? Allgemeine Java-Themen 3
W Frage zu Vererbung / konkretes Beispiel Allgemeine Java-Themen 4
F Vererbung von SessionBeans Allgemeine Java-Themen 3
O abstract, privat, Vererbung Allgemeine Java-Themen 29
L Annotations mit Vererbung Allgemeine Java-Themen 4
M Singleton und Vererbung? Allgemeine Java-Themen 45
T Problem mit Vererbung Allgemeine Java-Themen 3
V Vererbung und Schleifen Allgemeine Java-Themen 5
C Comparable + Vererbung Funktioniert nicht? Allgemeine Java-Themen 4
A Ansatz Objektorientierung, Methoden Vererbung Allgemeine Java-Themen 2
D Listen von Generischen Typen inkl. Vererbung Allgemeine Java-Themen 2
D Zugriffsmethode nach Vererbung ändern? Allgemeine Java-Themen 5
S Vererbung in UML Allgemeine Java-Themen 3
T Nochmal Frage zu Vererbung Interfaces etc. Allgemeine Java-Themen 10
Y Gedanken zur Vererbung Allgemeine Java-Themen 7
F Vererbung, Generizität und Collections. Allgemeine Java-Themen 7
G Frage zu statischen Variablen bei Vererbung Allgemeine Java-Themen 15
F Vererbung Allgemeine Java-Themen 5
S Vererbung von mehreren Klassen? Allgemeine Java-Themen 5
C enum und Vererbung Allgemeine Java-Themen 3
K Problem mit Vererbung - Kein wirklicher Nutzen. Allgemeine Java-Themen 10
G vererbung vs benutzung Allgemeine Java-Themen 7
L Vererbung klappt nicht Allgemeine Java-Themen 5
W Probleme mit Arrays und Vererbung ! Allgemeine Java-Themen 5
M vererbung einer "selbst-instanzierungs-klasse" Allgemeine Java-Themen 16
J Vererbung. Allgemeine Java-Themen 8
H Frage zur Vererbung Allgemeine Java-Themen 5
S private Instanzvaribalen bei "Innerer-Vererbung" Allgemeine Java-Themen 9
H Vererbung auch ohne erzeugung einer Instanz möglich? Allgemeine Java-Themen 3
M frage zur vererbung Allgemeine Java-Themen 12
G Generics und Vererbung. Allgemeine Java-Themen 21
M Vererbung von Hashtables Allgemeine Java-Themen 5
C dynamische Vererbung Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben