MVC - Komplexere Beispiele

Hallo zusammen,

Ich versuche meine momentane Swing-Anwendung nach dem Model-View-Controller-Entwurfsmuster aufzubauen. Prinzipiell ist mir auch klar wie das geht und was zu tun ist, allerdings tue ich mir schwer das Prinzip in größere Dimensionen zu übertragen:

Da mein Programm etwas mehr können soll als nur ein bischen rechnen benötige ich weit mehr als 3 Klassen (wie sie in allen Beispielen zu finden sind). View und Model zu trennen ist da kein Problem, aber alles über Controller zu verbinden schon eher. Ein Beispiel:

Am Anfang loggt sich der User ein, das Programm ermittelt dabei seine Berechtigungsstufe (in einem Controller). Diese benötige ich unter Umständen später wieder, also muss ich sie ja irgendwo speichern (also in einer separaten Klasse im Model?). Wenn ich nun später neue Komponenten erzeuge, jede mit eigenen Controllern versehen will/muss, dann muss ja jeder dieser Controller wieder auf die Berechtigung zugreifen können. Ich kann die Klasse aber doch nicht die ganze Zeit mit mir rumschleppen (C->V->C->M->C->V).

Ich wollte einfach mal fragen ob jemand ein etwas komplexeres Beispiel hat an dem ich mal sehen kann wie das im größeren Stil auszusehen hat. Wäre echt super :slight_smile:

Grüße, Ace

Mit einem Beispiel kann ich nicht dienen, aber allgemein steckt hinter dem MVC Pattern ja eher eine Idee als eine sture Vorschrift.

Wo ist diese Berechtigungsstufe den relevant? Bei der Sicht auf irgendwelche Daten oder bei Aktionen? Spricht etwas dagegen dieses eine Attribut im „Gesamtmodell“ oder „Gesamtcontroller“ zu speichern?

Benötigt jede neue Komponente wirklich einen eigenen Controller? Können die Komponenten nicht einen gemeinsamten Controller nutzen? Falls eine Komponente einen eigenen Controller benötigt kann dieser berechtigungsrelevante Anfragen an den Gesamtcontroller bzw. einen Controller der die Berechtigungsstufe kennt weiterreichen.

Informationen die du in der Gesamten Applikation brauchst (z.B. Benutzer identifizieren), würde ich in einen Controller packen, der eben Applikationsweit verfügbar ist. Wenn du mit DI arbeitest ist das kein Problem:

    @Inject
    public MyController(final ApplicationController applicationController) {
          User user = applicationController.getUser();
          // ...
    }
}

Die Komponentencontroller können dann über den ApplicationController sich ihre Informationen besorgen oder sich an globale Events hängen.

Stimmt so eine Art Gesamtcontroller wäre wirklich sinnvoll. Und dass das MVC eher eine Idee ist ist mir auch klar, ich wollte am Prinzip aber nicht schon nach der 4. inititierten Klasse scheitern :P.

Ich muss mir da wohl erstmal nen freien Kopf und ein freies Projekt machen und das ganze nochmal aufrollen. Ist nicht so einfach wenn man schon einige Panels gemacht hat und im Nachhinein nochmal was umstellen. Aber danke schonmal für den Tipp :slight_smile:

Hi Ace,
in diesem link habe ich eine Implementation von MVC-Pattern mit Java-Swing gesehen, ich hoffe das es hilfreich für Sie sein kann ;).