# Mehrere Views und ein Controller



## Frank Drebin (5. Dez 2006)

Hallo,

ich habe folgendes Problem. Ich schreibe grade ein kleines Programm nach dem MVC Muster. Nun habe ich einen Controller und mehrere Views. Der Controller hält immer eine Referenz der zuletzt instanziierten View. Das heißt also, wenn ich auf meine erste View zugreife bekomme ich eine ClassCastException. 

Kennt jemand eine elegante Lösung, wie der Controller mehrere Views halten kann und zur Laufzeit entschieden wird welche View ich grade benutze?

Oder ist der Gedanke n Views zu einem Controller zu haben falsch?


mfg

f.d.


----------



## SnooP (5. Dez 2006)

Nach welchem Schema entscheidest du denn, welche View die Informationen bekommen soll?

Ansonsten speicher alle Views in einer Liste des controllers - und die, die benachrichtigt werden sollen, bekommen ne entsprechende notification... guck dir mal das Observer-Pattern an.


----------



## byte (5. Dez 2006)

Frank Drebin hat gesagt.:
			
		

> Oder ist der Gedanke n Views zu einem Controller zu haben falsch?



MVC ist nichts weiter als ein Grundprinzip, um Daten mit einer grafischen Oberfläche zu verbinden. Man muss von Fall zu Fall unterscheiden, wie man vorgeht, daher kann man Dir die Frage so pauschal sicher nicht beantworten. Schon alleine daher nicht, weil es haufenweise Möglichkeiten gibt, Controller zu realisieren. Actions dienen z.B. als Controller und können von mehreren Views verwendet werden, insofern ist Dein Gedanke sicher nicht ganz abwägig.

Zum Problem: Die oo-Antwort heisst da Polymorphie. Lagere die Gemeinsamkeiten der Views in einer Oberklasse oder einem Interface aus. Dann kannst Du sie auch einheitlich behandeln. Wenn das nicht möglich ist, wirst Du um eine Fallunterscheidung schwer herumkommen. Dann würde ich aber mal darüber nachdenken, ob Du nicht für jede View einen eigenen "Controller" verwendest.


----------



## Frank Drebin (5. Dez 2006)

Hallo,

danke für eure Beiträge. Ich habe mich dazu entschieden für jeden View einen Controller zu bauen. Das scheint mir bei dem Programm das sinnvollste zu sein. Ist das eigentlich auch in der Praxis der Fall, dass man seperate Controller für jeden View schreibt? Oder ist es eher empfehlenswert einen Controller für alle Views zu haben und wenn ja warum?

mfg

f.d.


----------



## EOB (7. Dez 2006)

ich denke, es ist durchaus ueblich, nicht nur einen controller zu haben. schau dir mal das swing und action prinzip an. da hats eigentlich auch nir nur eine action. aber man kann das ja machen wie man will. da es aber auch darum geht, den controller austauschen zu koennen, waere es imho sogarsinnvoll, jewels einen zu haben.

und denk dran: Man geht schon ein Risiko ein, wenn man morgens aufsteht, über die Straße geht und seinen Kopf in einen Ventilator steckt. 

gruesse


----------



## byte (7. Dez 2006)

Controller beim MVC-Prinzip ist ein abstrakt zu verstehender Begriff, der alle Komponenten der Software umfasst, die für die Kommunikation zwischen GUI und Datenmodell zuständig sind. Für gewöhnlich gehören in einer komplexeren Software haufenweise Objekte zum Controller, z.B. Listener, Observer, ContentProvider, Actions, ...

All das sind Controller und demnach gibts davon für gewöhnlich auch viele. Um nicht zu sagen: Es ist meistens unmöglich, alle Controller in einer Klasse zusammenzufassen.


----------

