GEF-Tutorial Kapitel 2


Aus Wirthi's Wiki

Wechseln zu: Navigation, Suche
GEF-Tutorial
Eclipse Graphical Editor Framework
Allgemeines
Kapitel 1 (Überblick)
Kapitel 2 (Model-View-Controller)
Kapitel 3 (Model)
Kapitel 4 (Controller)
Kapitel 5 (View)
Kapitel 6 (Editor-Hauptklasse)
Kapitel 7 (Einsatz und Zusammenfassung)

Inhaltsverzeichnis

Im Kapitel 2 des GEF-Tutorials behandeln wir das Kernkonzept jedes GEF-Editors: das Model-View-Controller-Konzept (MVC).

[bearbeiten] Model-View-Controller

Die Model-View-Controller-Architektur (MVC) wird oft eingesetzt, wenn Daten angezeigt und editiert werden sollen. Es stellt daher auch für einen graphischen Editor die entsprechende Basisarchitektur dar. Die Idee hinter MVC ist, den Code des Datenmodells von dem der visuellen Darstellung der Daten zu trennen. Um die Daten zwischen Model und Anzeige konsistent zu halten ist ein drittes Modul, der Controller, notwendig. Diese drei Teile sind fundamentale Komponenten eines jeden Systems, welches Daten speichern, anzeigen und bearbeiten kann.

Die Trennung in drei unabhängige Schichten hat mehrere Vorteile. Nicht nur ist das Programm durch die klare Aufgabenverteilung übersichtlicher strukturiert, auch lassen sich die einzelnen Module leichter austauschen. So kann etwa das Model von einem arbeitsspeicherbasierten Konzept in eines, dass die Daten auch während des Betriebes in einer Datenbank speichert, geändert werden, ohne dass dies eine Auswirkung auf die View hätte. Ebenso kann die Darstellung der Daten in der View grundlegend geändert werden, ohne dass sich dadurch das Model ändern müsste. Dies ist etwa der Fall, wenn das Programm von einem Endgerät auf ein anderes übertragen wird, beispielsweise von einem PC auf ein Mobiltelefon mit höchst unterschiedlichen Darstellungsmöglichkeiten. Auch können die Model-Objekte problemlos gleichzeitig von mehreren Views dargestellt werden.

Die wichtigste Aufgabe kommt dem Controller zu. Dieser regelt den Datenfluss zwischen View und Model. Er bestimmt damit auch, welche Daten von der View angezeigt werden. Auch der Controller ist aber letztlich von den Benutzereingaben oder einer anderen Kontrollinstanz abhängig und führt nur die so erhaltenen Befehle aus.

[bearbeiten] Model

Das Model enthält die darzustellenden Daten. Es handelt sich um hierarchisch verbundene Java-Objekte, die ein gewisses Interface zur Abfrage und meist auch Manipulation der Daten bereitstellen. Das Model ist völlig unabhängig von GEF, braucht keine Vorgaben zu erfüllen und auch keine Interfaces zu implementieren.

Obwohl das Model vom Programmierer frei erstellt werden kann, werden bei größeren Projekten meist generierte Models verwendet. Ein oft eingesetztes Tool ist das Eclipse Modeling Framework (EMF). Ein damit generiertes Model kann problemlos mit GEF kombiniert werden.

[bearbeiten] View

Die View-Objekte sind zur Anzeige der Daten auf dem Bildschirm verantwortlich. Jedes anzuzeigende Model-Objekt ist mit einem View-Objekt verknüpft, das seine visuelle Darstellung verkörpert.

Ein View-Objekt nimmt einen rechteckigen Bereich auf dem Bildschirm ein. Innerhalb dieses Bereiches kann das Objekt beliebige Grafiken darstellen. Die Objekte werden allerdings üblicherweise auf die gleiche Art wie Model-Objekte hierarchisch geschachtelt: Kind-Objekte befinden sich innerhalb des Bereiches des Mutter-Objektes und können diesen nicht verlassen; dies is etwa von normalen GUIs bekannt: Buttons und Textfelder einer Maske können nur auf dieser, nicht daneben, liegen. So ergibt sich eine baumförmige View-Hierarchie. Dies ist jedoch nicht zwingend; Objekte können auch frei im Raum schweben, wie etwa von UML-Editoren oder den frei am Dektop bewegbaren Icons bekannt.

View-Objekte sind von org.eclipse.draw2d.Figure abgeleitet. In ihrem Konstruktor werden die sichtbaren Objekte angelegt und die Darstellung vorbereitet. Die eigentlichen Daten - die korrespondierenden Model-Objekte - werden von den Controllern erst später geliefert. Der genaue Vorgang obliegt dabei jedoch dem Controller, der sich in gewissem Rahmen frei gestalten lässt.

[bearbeiten] Controller

Die Controller sind das Bindeglied zwischen Model- und View-Objekten und Steuern den gesamten Edit-Prozess. Für jedes aktuell anzuzeigende Model-Objekt gibt es ein korrespondierendes Controller-Objekt, das wiederum ein View-Objekt generiert. Controller müssen das Interface org.eclipse.gef.EditPart erfüllen; meist wird jedoch von vorgefertigte Klassen abgeleitet.

EditParts sind aus GEF-Sicht die wichtigsten Objekte. Sie:

  • entscheiden, welche Model-Objekte angezeigt werden,
  • durch welche Views diese Objekte angezeigt werden, und
  • wie auf Benutzereingaben reagiert wird.

Das Interface EditPart stellt diese Funktionen zur Verfügung. Der Entwickler muss diese implementieren und dabei die oben gestellten Fragen beantworten: über die Funktion getChildren berichtet jeder EditPart dem Framework, welche Kind-Elemente das von ihm betreute Model-Objekt hat. Mit der Funktion createFigure (definiert in AbstractGraphicalEditPart) wird ein View-Objekt abgefragt, das der EditPart generieren muss. Benutzerinteraktionen werden über sogenannte EditPolicies behandelt; mehr dazu später. Eine Vielzahl weiterer Methoden steht insbesondere bei den GraphicalEditParts zur Verfügung, um die Kommunikation zwischen Edit-Part und View zu gewährleisten.

GEF-Tutorial: Allgemeines - Kapitel 1 - Kapitel 2 - Kapitel 3 - Kapitel 4 - Kapitel 5 - Kapitel 6 - Kapitel 7

Persönliche Werkzeuge