# Wann ist MVC sinnvoll?



## Marcel_Handball (19. Aug 2009)

Hi zusammen,

ich fange gerade an die GUI für ein größeres Projekt zu schreiben,  um die bisher ermittleten Informationen darzustellen.

Damit die Struktur von Anfang an übersichtlich bleibt, lese ich mich gerade etwas genauer in das MVC Pattern ein.
Doch ist dieses auch sinnvoll anzuwenden, wenn es nur eine View gibt? Denn beim Aktivieren einer GUI-Kompnente in der der View wird ja der Controller informiert (angemeldeter Listener aufgerufen), der das entsprechende Model aktualisiert. Dadurch werden die jeweils angemeldeten Views benachrichtigt.

Es erscheint mir nützlich diesen Weg zu gehen, da so nicht der ganze auszuführende Quellcode in den Listeners in der View steht. 


Aber lohnt es sich denn, zum Beispiel beim Drücken eines Buttons, den Umweg über den Controller und dem Model zu gehen (, damit dieser dann die View wieder informiert, die das Ereignis ja erst ausgelöst hat) wenn es nur eine View gibt?


----------



## Painii (19. Aug 2009)

Marcel_Handball hat gesagt.:


> Aber lohnt es sich denn zum Beispiel beim Drücken eines Buttons den Umweg über den Controller und dem Model zu gehen (, damit dieser dann die View wieder informiert, die das Ereignis ja erst ausgelöst hat) wenn es nur eine View gibt?



Wenn das Projekt gross genug ist wirst du wohl nicht auf die Zeit sehen können ob nicht doch mal 2 verschiedene Views das gleiche Model anschauen wollen.

Und du kannst auch Views bauen wo dann auch kein Controller was macht (das ist dann eben read-only aufs model - wenn dein view logik beinhaltet geht das nicht).

Ist eben ein Vorteil, du kannst dir soviele views bauen wie du brauchst, lieber jetzt sauber programmieren als dass du dich da später noch durchfrickeln musst wenn du es doch anders brauchst.


----------



## bygones (19. Aug 2009)

Marcel_Handball hat gesagt.:


> Wann ist MVC sinnvoll?


Immer


----------



## maki (19. Aug 2009)

IMHO Lesenswert:

Organizing Presentation Logic

Rechts im Menu unter Presentation Patterns: Martin Fowler: eaaDev


----------



## bygones (19. Aug 2009)

maki hat gesagt.:


> IMHO Lesenswert:
> 
> Organizing Presentation Logic
> 
> Rechts im Menu unter Presentation Patterns: Martin Fowler: eaaDev


hehe

WORK-IN-PROGRESS: - this material is still under development
Last significant update: 11 Jul 06

ja - manchmal kommt man wahr. nicht immer zu dem was man noch so alles tun will


----------



## Marcel_Handball (19. Aug 2009)

Könnt ihr mir ein Beispiel nennen, in der mehrere Views enthalten sind.

Ich kann mir zurzeit nur schwer ausmalen, wie dies aussehen würde, da ich im Grunde nur eine GUI-Oberfläche schreiben möchte. Wie könnten dort nun noch weitere Views hinzukommen und zu welchen Zweck?


----------



## Painii (19. Aug 2009)

```
public static void main(String[] args){
 Model m = new Model();
 View view1 = new PrimitiverView(m); //Gibt Daten auf der Konsole aus
 View view2 = new AufwaendigerView(m); //Gibt Daten mit GUI aus, bunte Bildchen etc.
 View view3 = new SpecialView(m); //z.b. für sehbehinderte
}
```
Wenn sich m ändert sieht man es sowohl in view1 als auch in view2, nur die Art der Ausgabe ist eben anders.

edit:
Konkret können mehrere views auch sinnvoll sein bei sehbehinderten... (Gibt ja z.b. hardware für blindenschrift)
Da könnte ein Bild dann einmal auf dem Bildschirm ausgegeben werden, andererseits auch Informationen auf die Zeile geschrieben werden.


----------



## Marcel_Handball (19. Aug 2009)

Die Umsetzung von mehreren Views ist klar, doch wann ist dies sinnvoll oder wobei setzt man mehrere views ein.

Ich schreibe nun nur eine Swing-Oberfläche. Wofür könnte dort z.B. eine zweite View hinzukommen?


----------



## gizmo (19. Aug 2009)

Das klassische Beispiel ist:
Du hast eine Tabelle mit Daten und ein Diagramm, welches die Daten visualisiert.
Wenn du nun die Daten in der Tabelle änderst, soll das Diagramm aktualisiert werden.


----------



## Marcel_Handball (19. Aug 2009)

Also stellt die View nicht immer die gesamte Oberfläche dar, sondern ist dabei häufig nur ein Teil der GUI, z.B. ein Panel im Frame?


----------



## gizmo (19. Aug 2009)

Das kannst du implementieren wie du willst. Wenn du die Panels einigermassen autonom gestaltest, gewinnst du flexibilität.

Meistens hat eine MVC-Applikation mehrere Views, Controller, Models. Es kann auch mehrere Views auf dasselbe Model geben. Das MVC Konzept hilft dir hier beim Updaten der Views.


----------



## Painii (19. Aug 2009)

GUI ist meist view+controller, ja. (Interface kann eben Ein- und Ausgabe sein)

Ein Button zum erstellen von einem Objekt wäre Controller, eine Auflistung aller Objekte aber View.


----------



## JohannisderKaeufer (19. Aug 2009)

Ein weiteres Beispiel für verschiedene Views sind Computerspiele bei denen man eine 3D-Ansicht hat und auf eine weitere View in der eine 2Dimensionale Kartenansicht dargestellt wird.


----------



## Marcel_Handball (19. Aug 2009)

Alles klar, danke an alle für die Infos!


----------



## sliwalker (20. Aug 2009)

Kann auch noch ein ziemlich beliebtes Szenario beisteuern:

Du schreibst erst eine Swing-Applikation. Dein Chef findet es toll und nun soll es für alle im Browser verfügbar sein.
Viel Spaß ohne MVC.


----------

