[MVC-Modell] Widersprechen Controller nicht der Datenkapselung?

Kümmelkorn

Aktives Mitglied
Thread Starter
Dabei seit
06.10.2008
Beiträge
1.941
Reaktionspunkte
127
Hallöle,

in der FH programmieren wir dieses Semester einen einfachen Texteditor und sollen daran u.a. die MVC Architektur lernen.

Der Texteditor besteht bei uns aus einem Menü, einer TextArea oben und einer Statusleiste unten, wobei die Statusleiste selbst zusammengebaut ist, weil Java/Swing dazu keine Klasse anbietet. Diese drei Teile sind ja Attribute unseres Fensters des Texteditors.

Und hier fängt es jetzt langsam an, komisch zu werden. Um das ganze zu realisieren, benutzt unser Prof das Depency Inversion Principle (siehe Diagramm unten, falls der Text zu undurchsichtig ist):
Dabei werden die Getter für die Fensterkomponenten (Textfelder, Buttons o.ä.) aus der Fenster-Klasse raus in ein Interface (in ObjC wäre es ein protocol) ausgelagert, welches dann zu allem Überfluss von einer inneren Klasse FrameAdapter in dem Fenster implementiert wird (ich hoffe, ObjC Programmierer kommen da noch mit). Die Getter Methoden geben dabei übrigens nicht etwa Eigenschaften der Fensterkomponenten (Texte o.ä.) zurück, sondern komplette Instanzen (z.B. Textfelder).
Diese werden dann vom Controller benutzt, der die ganze Arbeit tun soll (steht ja auch irgendwie unter dem Begriff "delegieren").

Das ganze als Diagramm:

Das Ende vom Lied: Das Fenster selbst hat eigentlich quasi gar keine Methoden mehr, nicht mal Setter und Getter. Eines der Grundprinzipien der Objektorientierung, nämlich Datenkapselung, wird innerhalb einer Vorlesung komplett über den Haufen geworfen, indem sowohl Getter als auch alle verarbeitenden Methoden des Fensters bzw. dessen Attribute in komplett anderen Klassen landen....

... und ich versteh nur noch Bahnhof! Mag mir das mal jemand erklären? Jetzt lerne ich Ewigkeiten Datenkapselung sei wichtig und jede Klasse soll sich ja um ihren eigenen Kram selbst kümmern und die anderen Klassen gehen die Attribute einer Klasse nichts an - und nun wird plötzlich alles munter ausgelagert und öffentlich preisgegeben? :confused:

Falls das ganze zu Java-Spezifisch ist und für ObjC-Programmierer nicht nachvollziehbar, würde ich mich freuen, wenn mir jemand ein Java-Forum empfehlen kann, das genauso freundlich ist wie das MacUser-Entwicklerforum!

Danke, Gruß
Micha
 

Anhänge

  • controller.jpg
    controller.jpg
    59,2 KB · Aufrufe: 74
  • controller2.jpeg
    controller2.jpeg
    23,6 KB · Aufrufe: 188
Zuletzt bearbeitet:
Ok, da ich ja hier für eine gehörige Verwirrung gesorgt hab, schreibe ich mal, wie ich deinen Prof verstehe.

Naja, MVC bestimmt ja eine Trennung von Datenmodell, Anzeigelogik und Businesslogik. Offensichtlich ist jetzt, dass dein Prof die JButtons und JTextfields zum Modell zählt. Der Controller verwaltet also dieses Modell im FrameAdapter, welches eine innere Klasse ist. Sie gehört also zum Controller. Der Controller versteckt also den FrameAdapter, welcher wiederum eigentlich nur die Sammlung der Modell-Objekte ist. Du hast ja kaum/keine innere Logik in dem FrameAdapter. Dadurch dass diese Klasse eine innere ist, geht das vollkommen in Ordnung.

Die Kapselung findet auf Controller-Ebene statt. Die Modellklassen kannst und sollst du nicht kapseln. Das sind mehr oder weniger alles Entitäten.

Phoo, es ist früh und ich weiß nicht genau, ob du verstehst was ich da geschrieben hab. Ggf hake nochmal nach..
 
Zurück
Oben Unten