# MVC-Pattern größeres Beispiel



## buzz_lightzyear (18. Apr 2017)

Hallo,
wie der Titel schon sagt, suche ich ein Programm, welches mit dem MVC-Pattern realisiert worden ist... ich habe zwar schon einige Mini-Beispiele gefunden, nur helfen mir die nicht mehr weiter. Ich würde ein größeres Programm benötigen, am Besten eines mit einer GUI.

Kenn da jemand was?
Danke & Lg
Buzz


----------



## Thallius (18. Apr 2017)

Wozu soll das denn gut sein? Ob ich nun 1 View, 1 Controller und 1 Model habe oder 20 von jedem. Das hilft doch nicht dem Verständnis...

Eigentlich ist schon ein Beispiel überflüssig. Wenn man sich das Pattern ein,al. wirklich durchliest dann versteht man es auch. Durch ein Tutorial lernt man das so oder so nicht.


----------



## buzz_lightzyear (18. Apr 2017)

Danke für deine hilfreiche Antwort!


----------



## Meniskusschaden (18. Apr 2017)

Thallius hat gesagt.:


> Ob ich nun 1 View, 1 Controller und 1 Model habe oder 20 von jedem. Das hilft doch nicht dem Verständnis...


Ich finde eigentlich schon, dass das für das Verständnis wichtig ist. Es gibt viele Möglichkeiten, wie man das Konzept (richtig und falsch) interpretieren kann. Wie kommunizieren beispielsweise die Controller mit dem Model? Kennt jeder Controller sein individuelles Model-Objekt? Oder kennt er mehrere? Oder gibt es ein Model-Objekt als Model-Zugriffsschicht über das die Aufrufe sämtlicher Controller abgewickelt werden? Was passiert, wenn im Model ein neues Objekt entsteht, für das man ein eigenes View-Controller-Paar benötigt? Wer erstellt sie und wie macht er das? Solche Fragen sind am Anfang nicht leicht zu beantworten und anhand der trivialen Beispiele mit nur je einem Objekt erkennt man es kaum. Ich glaube, MVC ist ein Muster, mit dem man viel experimentieren und ein paar Fehlschläge hinnehmen muß, bis man eine gute Organisation gefunden hat.


buzz_lightzyear hat gesagt.:


> Kenn da jemand was?


Ich kenne leider kein solches Beispiel. Vielleicht bringt es dir mehr, wenn du selbst versuchst ein kleines MVC-Programm zu erstellen und hier einfach konkret nachfragst, wenn du irgendwo nicht weiter kommst.


----------



## HarleyDavidson (19. Apr 2017)

Ich selbst habe ein kleines CRM mit Datenbank und Dateimanagement geschrieben, das auf dem MVC-Pattern aufliegt.
Im Grunde ist nur folgendes wichtig:
Der Controller instanziiert das Model und die View.
Bei meinem Beispiel wird auf dem Hauptframe eine Liste aller Kunden angezeigt. Wenn man nun auf einen Kunden klickt, wird das Kundenobjekt dem nächsten Controller übergeben (dem Kundencontroller), der dann wiederrum sein Model und seine View instanziiert.
So hast du für jedes Fenster ein loses Modul, dass du ohne Probleme testen kannst.
Globale Einstellungen wie Schriftarten, Datenbankverbindungen usw. halte ich in einem Appmanager-Objekt bereit, den ich als Singleton implementiert habe. Auf diese Klasse können alle Controller (oder Models) zugreifen.
Ich hoffe, die Beschreibung hat dir ein wenig geholfen.


----------



## mrBrown (19. Apr 2017)

Etwas OT:



HarleyDavidson hat gesagt.:


> Der Controller instanziiert das Model und die View.


Wenn man's genau nimmt (zB nach POSA), nein.
Model wird unabhängig von View und Controller initialisiert, der View übergeben, und die instanziiert den Controller.



HarleyDavidson hat gesagt.:


> Schriftarten


Gehören zur View.


HarleyDavidson hat gesagt.:


> Datenbankverbindungen


Gehören zum Model.


HarleyDavidson hat gesagt.:


> [...] halte ich in einem Appmanager-Objekt bereit, den ich als Singleton implementiert habe. Auf diese Klasse können alle Controller (oder Models) zugreifen.


Singleton umgesetzt mit öffentlicher statischer Instanz? Böses Antipattern


----------



## HarleyDavidson (19. Apr 2017)

Das Gute an einem Pattern ist, dass es ein Best-Pratice vorzeigt und man sich an ihm orientieren kann.
Für meinen Anwendungsfall habe ich mein Ziel erreicht: Modularisierung und damit leichte Wartbarkeit.
Ist vielleicht auch ein nützlicher Hinweis für den TE.

Ein global verfügbares Singleton Objekt? Was ist daran Antipattern? Damit verhindere ich, dass es u.a. mehrere Datenbankverbindungen gibt die sich gegenseitig blockieren.


----------



## thecain (19. Apr 2017)

Ein Singleton ist schon per se ein Antipattern. u.a. bezüglich Testbarkeit.

Mit MVC hat das auf jeden Fall wenig zu tun...


----------



## Thallius (19. Apr 2017)

HarleyDavidson hat gesagt.:


> Das Gute an einem Pattern ist, dass es ein Best-Pratice vorzeigt und man sich an ihm orientieren kann.
> Für meinen Anwendungsfall habe ich mein Ziel erreicht: Modularisierung und damit leichte Wartbarkeit.
> Ist vielleicht auch ein nützlicher Hinweis für den TE.
> 
> Ein global verfügbares Singleton Objekt? Was ist daran Antipattern? Damit verhindere ich, dass es u.a. mehrere Datenbankverbindungen gibt die sich gegenseitig blockieren.



Was ist daran modular wenn jedes Modul von deinem Singleton abhängig ist? Ich glaube Du hast den Begriff Modular noch nicht so ganz richtig verstanden.

Wenn Du Dein Singleton entfernst, dann geht weder dein View noch dein Model. Beide sind also essentiell abhängig von dem Singleton. Und das ist genau das Gegenteil von dem was MVC erreichen will.



Gruß

Claus


----------



## HarleyDavidson (19. Apr 2017)

Modular daran ist, dass ich nur diese eine Klasse mit Testverbindungen ausstatten muss und dann kann ich entweder meine komplette Applikation oder nur ein Modul damit testen.
Mal abgesehen davon hat noch niemand außer mir versucht dem TE bei seiner Frage zu helfen. Ich habe kein Problem, mein Code funktioniert und ich weiß was ich tue.


----------



## mrBrown (19. Apr 2017)

HarleyDavidson hat gesagt.:


> Modular daran ist, dass ich nur diese eine Klasse mit Testverbindungen ausstatten muss und dann kann ich entweder meine komplette Applikation oder nur ein Modul damit testen.


Und wie stattest du die eine statische Instanz mit Testverbindungen aus?

Und nein, statische Singeltons bleiben da so Gegenteil von Modular.



HarleyDavidson hat gesagt.:


> Ich habe kein Problem, mein Code funktioniert und ich weiß was ich tue.



Ach wo ich diesen Satz liebe...


----------



## HarleyDavidson (19. Apr 2017)

Okay folgendes:
Ich habe für den TE ein Beispiel ohne Details genannt wie ich das Pattern für mich eingesetzt habe.
Ich habe etwaige Abweichungen vom Pattern erklärt.
Ihr nehmt mein Beispiel anhand der wenigen Informationen auseinander. Ihr macht eine Motordiagnose bevor ihr überhaupt die Autohaube geöffnet habt.
Das halte ich nun nicht weiter für eine sinnige Diskussion, die Beiträge sind seit dem letzten Post weder sachlich noch konstruktiv.
Vielleicht sollte sich hier jeder mal überlegen, was der Sinn von einem Forum ist. Ich habe in diesem immer gesehen, dass man nützliche Tipps und Hilfestellungen gibt. Der TE kann ja aus der hier entstandenen Diskussion selbst seine Schlüsse ziehen, ob er sich in Zukunft bei Fragen wieder an dieses Forum wendet.


----------



## stg (19. Apr 2017)

*grabs popcorn*


----------



## AndiE (19. Apr 2017)

Ich würde die Sache von hinten aufzäumen. Grundlage wäre eine JTable, die ja selbst eine MVC-Struktur erwartet. Dazu eine 1:n-Datenbeziehung. Praktisch also z.B. eine CD-Verwaltung. Der Benutzer kann CD's einlesen, und dazu die darauf vorhandenen Tracks. Er kann aus einem Listenfeld die CD heraussuchen und sieht dann in der Tabellenansicht, welche Tracks da drauf sind. Ich denke, das ist schon etwas größer, und lässt sich als MVC erstellen.


----------



## Flown (19. Apr 2017)

mrBrown hat gesagt.:


> (zB nach POSA)


Was ist POSA?

Also Grundsätzlich gibt es Singletons die sinnvoll sind, z.B. LogMangager, Runtime, Desktop, Caches. 
Das Problem mit Singletons sind einfach eine starke Kopplung und wenn du eben:


HarleyDavidson hat gesagt.:


> Globale Einstellungen wie Schriftarten, Datenbankverbindungen usw. halte ich in einem Appmanager-Objekt bereit, den ich als Singleton implementiert habe. Auf diese Klasse können alle Controller (oder Models) zugreifen.


alle "globalen" Konfigurationen hier drinnen hast, kann das für dich passen. Aber aufgeteilt und richtig modularisiert ist das auch nicht. Das Model braucht keine Informationen über Schriftarten und die View keine über DB-Verbindungen.

PS: Achja Singletons lassen sich mocken und testen.


----------



## mrBrown (19. Apr 2017)

Flown hat gesagt.:


> Was ist POSA?


Pattern Oriented Software Architecture


----------



## buzz_lightzyear (19. Apr 2017)

Hallo,
danke für eure zahlreichen Antworten  Ich hab mich jetzt mal hingesetzt und mir ein Konzept für ein Programm überlegt, welches ich mittels MVC umsetzen möchte. Zwar eine Filmdatenbank - ähnlich wie Griffith. Ich habe eine SQL Datenbank, wo sämtliche Filme mit Daten (Titel, Darsteller, Genre...) drinnen stehen. Diese sollen auf einer GUI angezeigt werden und eine Suchfunktion sollte das Programm auch haben. Der Benutzer sollte noch neue Filme für die Datenbank eingeben können. Ich denke, das ist ein gutes Beispiel für das MVC Pattern 

Ich hab mal ein UML Diagramm erstellt und bitte um konstruktive Hinweise


----------

