# Model View Controller mit Swing



## Jay1980 (3. Sep 2010)

Servus,

ich habe nun etwas gelesen und glaube ich setze meine Architektur so um:

Views - es gibt einen RootFrame, der sich von JFrame ableitet und ein Menu besitzt. Dazu ein JPanel (mainPanel) und da drin setze ich das JPanel was von jedem View konfiguriert wird. Im RootFrame gibt es auch die Methode replaceView(), welche alles was zum mainPanel gehört hat, rausschmeisst (removeAll()), dann das Parameter-JPanel, also den neuen View da einhängt und das mainPanel revalidiert und repaint()-ed. Dann gibt es im Paket noch viele View, etwa 'WelcomeView', die von JPanel erben.  

Model - das Model besteht aus den Entitäten und obendrauf sitzt eine Fassade. Der Controller ruft nur Methoden der Fassade auf.

Controller - ich nutze das Action-Konzept von Swing, habe also etwa die Klasse ExitAction, die von AbstractAction erbt und etwa dem 'Datei-Menu-Eintrag' 'Beenden' zugewiesen ist. In dem Fall ruft die Methode nur System.exit(0) auf und beendet so die Anwendung. Falls wirklich etwas zu tun ist, dann holt sich der Controller die notwendigen Daten aus dem View mittels flushWindow(), dann wird mit den Daten die Fassaden-Methode zum Anwendungsfall aufgerufen und dann wird mit dem Ergebnis an den neuen View weiterverwiesen. Dem Konstruktur zum View werden die passenden Daten mitgegeben. 

Inwieweit ist dies ein passabler Ansatz? 

Ich war mir nicht sicher, dass ich die Action-Objekte gleich als Controller nutze und nicht etwa noch ein GuiController-Objekt habe, was alle Methoden anbietet, die dann erst auf die Model-Fassade zugreifen. Ich wusste auch nicht, ob es geschickt ist, bei den Views eigentlich immer nur das JPanel im mainPanel auszutauschen.

Danke vorab fürs Feedback.


----------



## Tobias (3. Sep 2010)

Also JPanels per removeAll auszutauschen hat bei mir bisher eigentlich immer Probleme gemacht. Besser ist ein CardLayout.

Ansonsten erscheint mir das Ganze ein passabler Ansatz, da Swing die GUI und den Controller eh mehr oder weniger in einer Komponente zusammenzieht und nur das Model getrennt betrachtet, ist es aus meiner Sicht auch ok, die Action-Klassen direkt als Controller zu verwenden. Nur wenn gesteigerter Bedarf für eine Wiederverwendung besteht (etwa weil das Ganze auch mal mit einer Webschnittstelle laufen soll) würde ich den Controller separat modellieren.


----------



## Gast2 (6. Sep 2010)

Also ich hab mit Swing mal ein MVC Bsp. gemacht...

Ich würde in der GUI Anonyme Listener und Action verwenden und als Controller nochmal extra Zwischenschicht, die nichts mit dem GUI Toolkit zu tun hat, um darin z.B. Service aufrufe an den Server zu machen.

Ich hab hier mal ein jar kannst es dir ja mal anschauen.
Also die package DAO und Service musst du dir natürlich auf dem Server vorstellen, sind nur für die Demonstration da wie es aussehen könnte ...


----------

