Einführung Inhaltsverzeichnis 2. Darstellung von Variablen und Werten

3. Das Entwurfsmuster MVC

In beiden Programmen besteht das ganze Programm aus einer Klasse, wie aus einem Stück Stein geschnitzt: Diese Art der Programmierung heißt monolithisch. Für kleinere Programme ist diese Vorgehensweise geeignet, aber wenn die Anzahl der Programmzeilen über eine bestimmte Grenze hinauswächst, wird sie unübersichtlich. Dabei fällt es auf, dass Geschäftslogik, Oberflächenprogrammierung und Steuerung miteinander vermischt überall in den Programmen zerstreut sind. Das Entwurfsmuster „Model-View-Control“ bricht diese Struktur auf und verteilt die Algorithmen auf drei Klassen.

Hierbei ist Model autonom: Es ist unabhängig von den beiden anderen. Es enthält die Daten und Algorithmen, die die Geschäftslogik der Anwendung abbilden. Bei der Uhr ist dies der Teil, der unabhängig davon ist, ob die Uhrzeit digital oder kreisförmig dargestellt wird; auch davon, ob die Uhr gesteuert wird oder nicht.

Die View enthält die Darstellung der aktuellen Daten. Dabei kann es für ein Model mehrere unterschiedliche Views geben: für die Uhr die Digitalanzeige oder die kreisförmige. View ist abhängig vom Model, zumal sie von ihm die Daten (wie die aktuelle Uhrzeit) abholen soll.

Das Control (die Steuerung) initiiert jede Veränderung in der Anwendung, sei das am Model oder an der Darstellung. Bei der Uhr gehört zu ihren Aufgaben das Ticken der Uhr (jede Sekunde bzw. alle fünf Sekunden), sowie die Ereignisbehandlung (für die Knöpfe oder über die Tasten). Control benachrichtig sowohl Model wie auch View(s) über etwaige Veränderungen: Model muss dann seine Daten aktualisieren und die View(s) muss/müssen die aktuellen Daten vom Model abholen, um sie darzustellen.

Gegebenenfalls können mehrere Controls unabhängig voneinander am selben Model und an denselben Views agieren. Bei mehreren Views ist es möglich, dass jede View ihr eigenes Control hat.

Aus dieser Aufgabenteilung ergeben sich folgende Beziehungen:

MVC

Die Pfeile bezeichnen die Abhängigkeiten, d.h. „wer kennt wen“: Model ist autonom, View kennt Model, Control kennt beide. Aus dieser Struktur ergibt sich ein typisches Hauptprogramm in Java für den Fall von einer View:

public static void main(String[] args) {

   IModel model = new Model();

   new Control(model, new View(model)); }

Die Signaturen der Konstruktore der drei Klassen sind demnach:

Model()

View(IModel)

Control(IModel, IView)

wobei Model implements IModel und View implements IView. Weil niemand von Control abhängig ist, braucht es keine Schnittstelle.

Im Falle von mehreren Views gibt es drei Möglichkeiten:

1. Entweder steuert ein Control alle Views,

2. oder hat jede View ihr eigenes Control-Objekt derselben Klasse,

3. oder hat jede View ihre eigene Control-Klasse.

Im dritten Fall wird jede Control-Klasse instanziiert:

   new Control1(model, new View1(model));

   new Control2(model, new View2(model));

  

Im zweiten Fall wird für jede View ein eigenes Control-Objekt derselben Klasse instanziiert:

   new Control(model, new View1(model));

   new Control(model, new View2(model));

  

Im dritten Fall muss Control alle Views kennen, daher ist seine Konstruktorsignatur

Control(IModel, IView[])

Und es wird mit

   new Control(model, new View[] { new View1(model), new View2(model), …);

instanziiert. Alternativ ist der Konstruktor mit einer Signatur

Control(IModel, Collection<IView>)

vorstellbar.

Uhr mit MVC

Einführung Inhaltsverzeichnis 2. Darstellung von Variablen und Werten


Version: 19. April 2012

© Prof. Solymosi, 20102 Beuth-Hochschule für Technik Berlin, Fachbereich VI (Informatik und Medien)

solymosibht-berlin.de