# Beispiel für MVC gesucht



## SamHotte (23. Feb 2006)

Moin,

schon seit einer Weile versuche ich, das MVC-Muster in mein aktuelles Projekt einzubauen, aber jedes Mal, wenn ich was darüber lese, habe ich das Gefühl, ich blicke es gar nicht mehr. Leider helfen mir die vielen Beispiele z. B. auf Wikipedia auch nicht, denn nirgends gibt es mal tatsächlich Code zu sehen, wie man das programmiert.

Hat jemant vielleicht ein echtes Beispiel parat, in dem mal eine Beispiel-GUI mit Datenbankzugriff nach MVC programmiert ist?

Dank im Voraus!


----------



## AlArenal (23. Feb 2006)

Ganz Swing ist MVC. Sourcecode findest du im JDK  Beispiel-Anwendungen übrigens auch, es macht sich nur nie einer die Mühe sie sich anzuschauen...


----------



## stev.glasow (23. Feb 2006)

Hilft das? http://www.java-forum.org/de/viewtopic.php?p=52829#52829


----------



## SamHotte (23. Feb 2006)

Mir geht es nicht um eine einzige Swing-Komponente, sondern um 'ne etwas komplexere GUI mit diversen Aktionen, Ansichten, lesenden und schreibenden Datenbankzugriffen etc. Meines geringen Wissens nach basieren MVC-Architekturen auf dem Observer-Pattern, richtig? Dann müsste sich ja irgendwo unter c:\jdk\demos ein "Observer" finden lassen, was bei mir (jdk1.5.0_03) leider nicht der Fall ist.


----------



## AlArenal (23. Feb 2006)

Lad dir die Sourcen von BlogBridge runter, aber erwarte nicht auf Anhieb durchzusteigen


----------



## SamHotte (23. Feb 2006)

@stevg: leider nein, denn ich brauche irgendwo einen Lichtblick für die Gesamtarchitektur einer Anwendung mit MVC. Die typischen Hello-World-ähnlichen Beispiele bringen keinen Durchblick :-(
@AlArenal: danke für den Tipp, bin ja mal gespannt, wie umfangreich das Teil ist 

edit: wieso kann mein traurig-emoticon 
	
	
	
	





```
:-(
```
 nicht dargestellt werden  :bahnhof:


----------



## AlArenal (23. Feb 2006)

BlogBridge ist relativ umfangreich, deckt aber viel ab. Vom Eigenbau von Swing-Komponenten, über Multithreading, JDBC und Integration von HSQLDB, ....


----------



## SamHotte (23. Feb 2006)

Ich seh' dann mal zu, dass ich heut abend zu hause die Sourcen 'runterlade (geht hier in der Arbeit nicht). Brauche ich die HSQLDB da auch gleich für?


----------



## AlArenal (23. Feb 2006)

Wenn du das fertige Teil runterziehst, ist da alles mit bei, was du brauchst. Wenn du dir die Sourcen von HSQLDB auch noch antun möchtest oder brauchst, wirste die auch noch ziehen müssen, klar.


----------



## SamHotte (23. Feb 2006)

Nene, Datenbank-Sourcen gehen dann doch etwas zu weit für den Moment, ist auch so genug zu lesen, denke ich


----------



## bygones (23. Feb 2006)

SamHotte hat gesagt.:
			
		

> Meines geringen Wissens nach basieren MVC-Architekturen auf dem Observer-Pattern, richtig?


nein

andersrum - Observer Pattern baut auf MVC Prinzip auf


----------



## SamHotte (23. Feb 2006)

Lt. Wikipedia wird die Kommunikation im MVC mit dem Observer-Muster realisiert - für mich klingt das nach "MVC baut auf Observer auf" ???:L
Bin ich zu blond oder stimmt am Wiki was nicht?


----------



## bygones (23. Feb 2006)

jein - MVC ist ein allgemeingültiges Prinzip. In Java wird es durch das Observer pattern realisiert.

Wenn man es ganz genau nimmt baut keiner auf dem anderen auf. Es sind zwei Patterns die sich z.T. benutzen, aber das eine ist keine Teilmenge des anderen.

Mit meiner Aussage meinte ich, MVC ist allgemeiner als Observer Pattern


----------



## SamHotte (23. Feb 2006)

Achso. Danke für die Erläuterung; vielleicht kapier' ich ja endlich wenigstens eines der beiden ...


----------



## SamHotte (24. Feb 2006)

Leider sind die Sourcen beim Installer nicht mit dabei. Irgendwas ist zwar bei SourceForge, aber da müsste ich jede Datei einzeln herunterladen, oder gibt's da 'nen Trick?


----------



## AlArenal (24. Feb 2006)

Das "irgendwas" heißt CVS und der Trick ist sich einzuloggen und sich nen Snapshot zu ziehen 

Anonymous CVS Access:
http://sourceforge.net/cvs/?group_id=90439

Bei Interesse kann ich dir den aktuellen Snapshot aber auch zumailen oder auf FTP legen. Ist rund 5.3 MB als RAR-Archiv groß.


----------



## SamHotte (24. Feb 2006)

Und die Adresse gebe ich in Eclipse in die CVS-Location ein? Sorry, bin mit CVS nicht wirklich firm ...


----------



## AlArenal (24. Feb 2006)

Nö, an der Adresse steht, wie du per CVS Zugriff auf des Repository von BlogBridge auf SF.net bekommst.


----------



## SamHotte (24. Feb 2006)

Ah, okay, danke!


----------



## SamHotte (25. Feb 2006)

Hab den "HEAD" ausgecheckt (mit Eclipse 3.1.2), und jetzt werden einige Libraries vermisst, die ich im CVS nicht finde:
- lib/binding-1.0.jar
- lib/forms-1.0.5.jar
- lib/uif-1.4.jar
- lib/uif-extras-1.4.jar

Jemand eine Ahnung, wo ich die herbekomme?


----------



## AlArenal (25. Feb 2006)

Also ich habe "blogbridge" ausgecheckt und da ist alles drin.


----------



## SamHotte (25. Feb 2006)

aus HEAD oder aus Versions?


----------



## AlArenal (25. Feb 2006)

server:anonymous@cvs.sourceforge.net:/cvsroot/blogbridge aus HEAD


----------



## AlArenal (25. Feb 2006)

kannst dir aber auch z.B. die Version 2.13 holen und da ist auch alles drin.


----------



## SamHotte (25. Feb 2006)

Hm. Grad zum zweiten mal (aus Eclipse heraus) gemacht, wieder nix, die Libraries fehlen. Hab leider keine Erfahrung mit CVS ohne Eclipse; im Projekt sind andere Versionen (jeweils eine weiter) vorhanden, stimmt da vielleicht nur was an den Einstellungen nicht? Ich kann ja schlecht deinen Befehl in die normale Windows-Kommandshell eintippen, oder?

EDIT: hatte mir vorher den Win-Installer geholt, da sind keine Sourcen drin.


----------



## AlArenal (25. Feb 2006)

Ich benutze TortoiseCVS für CVS und ToirtoiseSVN für SVN außerhalb von Eclipse. Sind im Grunde Erweiterungen des Windows File-Explorers.

Ah ich sehe schon, in Eclipse schauts anders aus.. mal sehen... Hier findest du in z.B. was in

/Versions/blogbridge/blogbridge release-2-13-stable

Da ist auch alles drin. (Libs liegen z.B. in /lib)


----------



## SamHotte (25. Feb 2006)

Jetzt fehlt was anderes ... "lib/quaqua-menu-only.jar" ... ist vielleicht doch etwas zu viel Aufwand, nur um das Pattern mal zu schnallen. Vielleicht finde ich ja doch mal irgendwo ein einfaches Beispiel für Pattern-Nixchecker wie mich ;-)


----------



## AlArenal (25. Feb 2006)

Ich sehe nicht, warum das fehlen sollte, denn mein BB 2.13 kommt auch ohne und funzt prächtig...


----------



## SamHotte (25. Feb 2006)

Tja, eclipse kann aber nicht kompilieren  ???:L


----------



## AlArenal (27. Feb 2006)

Woher willst du eigentlich wissen, dass diese Datei fehlt? War da ne Eclipse-Projekt-Datei bei? Wenn ja - vergiss sie! Die muss nicht auf dem Stand der Dinge sein, Pito benutzt nämlich Netbeans und ne Datei mit "aqua" im Namen riecht nach Mac OS X (was allerdings wieder zu Pito passen würde) ....


----------



## SamHotte (27. Feb 2006)

Ich hab nur das Projekt ausgecheckt, und eclipse meckert, dass sie (er? es?) wegen dieser fehlenden Lib nicht kompilieren kann. Dabei wird die Projektdatei eigentlich automatisch erstellt, dachte ich; da ich NetBeans noch nie benutzt habe, weiß ich auch nicht, ob die sich vielleicht nicht mögen ... soviel zum ersten Versuch, open source quelltext anzuschauen


----------



## AlArenal (27. Feb 2006)

Warum, anschauen kannst du ihn ja 

Aber wenn Eclipse ne ganz bestimmte Lib anmeckert, muss es ja von der was wissen und das kann es nur, wenn da ne Projekt-Datei von Eclipse drin war und die muss nunmal nicht zwingend den aktuellen Stand der Dinge repräsentieren, da nirgends geschrieben steht dass die Jungs auch Eclipse benutzen (wie gesagt, Pito benutzt NetBeans).

Lösch die, importier das Projekt neu inkl. der vorhandenen Libs und dann schau nochmal in Ruhe.


----------



## SamHotte (27. Feb 2006)

Anschauen ist aber m. E. nur sinnvoll, wenn ich auch das Programm mal sehe; nur der Quelltext ist dann doch zu abstrakt ...  :bahnhof: 

Danke erstmal für die Anregung, ich teste das heut abend mal.


----------



## AlArenal (27. Feb 2006)

SamHotte hat gesagt.:
			
		

> Anschauen ist aber m. E. nur sinnvoll, wenn ich auch das Programm mal sehe; nur der Quelltext ist dann doch zu abstrakt ...  :bahnhof:
> 
> Danke erstmal für die Anregung, ich teste das heut abend mal.



Du hast doch letze Woche noch die Binaries gezogen. Ich dachte du hast das Teil schon lange laufen....


----------



## SamHotte (27. Feb 2006)

Bringt doch nix, wenn ich nicht an die richtigen Stellen im Quelltext komme, und das wollte ich mit dem Debugger machen; das Programm selbst interessiert mich nicht wirklich, nur die Umsetzung von MVC ...


----------



## AlArenal (28. Feb 2006)

Wie bereits vermutet, ist quaqua ne plattform-spezifische Klamotte, nämlich ein MAc OS X L&F:

http://www.randelshofer.ch/quaqua/download.html


----------



## SamHotte (28. Feb 2006)

Naja, seis drum. Ich blick durch den Code eh nicht durch, ich finde nicht einmal die allererste in main() aufgerufene Methode, somit kann ich das auch als MVC-Lehrstück leider vergessen, fürchte ich.

Jemand eine andere Idee, wie man sich das beibringen kann?


----------



## AlArenal (28. Feb 2006)

So ein Blick in das JNLP-Template wirkt Wunder:


```
<application-desc main-class="com.salas.bb.core.ApplicationLauncher">
```


----------



## SamHotte (28. Feb 2006)

Danke, soweit war ich auch schon. Aber die erste _in_ main() aufgerufene Methode ist eine geerbte, nämlich DefaultApplicationStarter.boot -- irgendwas von "jgoodies", was auch immer das ist. Da ich keine Zeit für reverse Engineering habe, kann ich mit dem Sourcecode rein gar nichts anfangen. Oder gibt es irgendwo eine Dokumentation dazu (ich meine etwas, das über die javadoc-Kommentare hinausgeht)?


----------



## SamHotte (1. Mrz 2006)

Hallo?


----------



## AlArenal (1. Mrz 2006)

Nö, wozu auch? Ist ja schließlich ne Client-Software und keine API-Lib, für die man noch groß Tutorials zum Coding schrieben sollte/müsste.

Ich weiß ja nicht was du erwartet hattest. Das man nicht "mal eben" in Sourcen einer etwas komplexere Software reinschauen kann und alles plötzlich wie ein offenes Buch vor einem liegt, sollte klar sein.


----------



## SamHotte (1. Mrz 2006)

Erwartet hatte ich eine Antwort auf meine Frage. Ich bin auf der Suche nach Tipps bzw. Beispielcode für eine "echte" Anwendung nach MFC, damit ich daraus lernen kann. Das von dir genannte Programm ist sicherlich ganz toll, aber zum lernen nicht geeignet, da es weder dokumentiert ist noch der Quellcode komplett ist (besagtes "jgoodies" beispielsweise, das gleich in der main()-Methode aufgerufen wird, kann ich nicht nachvollziehen).

Wenn man schon alles kann, dann kann man vielleicht auch den Sourcecode von blogbridge verstehen. Passt aber nicht zum Thread. Nicht jeder ist so ein Mega-Checker wie du.


----------



## AlArenal (1. Mrz 2006)

Der Quellcode ist komplett. Die JGoodies sind von Karsten Lentzsch (Google weiß mehr) und wenns was ist, was die Jungs von BB nicht selbst geproggt haben, isses auch nicht tragisch und für dich nicht relevant.
Als Dokuemtnation gibts Quellcode samt Javadoc und da kann man ja erstmal nen Blick reinwerfen, bevor man gleich die Beine unter den Arm nimmt, sobald einem eine Codezeile nicht auf Anhieb einleuchten mag.

Wenn ich mir anderer Leute Source anschaue würde ich mir auch manchmal wen wünschen, der mich ans Patschehändchen nimmt und mit das mit den Bienchen und Blümchen erklärt - so isses aber nicht. Manches leuchtet auch mit kompletter Doku bei gekauften Komponenten nicht ein und man muss nachhaken. Das sind aber spezifische Detailfragen.

Du wolltest ein Programm mit MVC und JDBC und da haste eins, noch dazu eins dass mir schon lange sehr gute Dienste leistet 
Wenn dir das too much ist, kannste bei Sourceforge & Co. tausende von anderen Projekten durchforsten, aber da wird nirgends ein LiesMichSamHotte.pdf dabei sein, dass dir alles vorkaut. Vieles muss man sich im wahrsten Sinne des Wortes erarbeiten.

Wenn du ein "Checker" werden willst, musst du da durch. Von nichts kommt nunmal auch nichts.


----------



## SamHotte (1. Mrz 2006)

[ ] du weißt, was Dokumentation ist.

Würdest du jemandem, der die grundsätzlichen Prinzipien eines Autos verstehen möchte, einen in seine Einzelteile zerlegten Porsche zeigen und das war's? Muss schon lange her sein, dass du mal was lernen musstest...


----------



## AlArenal (1. Mrz 2006)

Manche müssen auch vorm ersten Mal noch ein Buch über Sex lesen...


----------



## SamHotte (1. Mrz 2006)

Wenn programmieren so einfach wäre, gäb's keine Probleme ...

Ist das Forum hier eigentlich zum helfen da oder zum profilieren?   :applaus:


----------



## SamHotte (2. Mrz 2006)

Nebenbei: die Fragestellung ist immer noch offen 

Gesucht ist ein Beispiel für eine Anwendung nach MVC. Dabei sollen verschiedene GUI-Elemente vorhanden sein und auch Menüpunkte (de-)aktiviert werden, wenn im Kontext nicht gebraucht.
Mich interessiert vor allem die SW-Architektur, also:
1. in welcher Reihenfolge initialisiere ich Modell, Controller und Views,
2. wie sieht ein "richtiger" Controller aus,
3. wohin stecke ich den Code für die Aktionen, 
4. welche Referenzen (bspw. auf die Modell-Klassen) übergebe ich von wem an wen, um Zirkel zu vermeiden,
5. wie viele verschiedene Controller-Klassen benötige ich,
6. wie funktioniert das mit den Listenern
usw.

Wenn jemand ein Beispiel kennt, das zudem keine externen Bibliotheken verwendet (insbesondere kostenpflichtige wie JGoodies nicht), wäre es extrem nett, einen Link darauf zu posten. Richtige Begeisterung käme bei einem gut dokumentierten Stück Software auf.


----------



## AlArenal (2. Mrz 2006)

SamHotte hat gesagt.:
			
		

> Mich interessiert vor allem die SW-Architektur, also:
> 1. in welcher Reihenfolge initialisiere ich Modell, Controller und Views,



So, wie es für dich im Einzelfall am praktikabelsten ist.
Vielleicht kannste das Model schon aufbauen ehe du das UI anzeigst oder benötigst dafür gar schon Daten, vielleicht werden die Daten auch erst später reingeladen. Spielt auch grundsätzlich eine untergeordnete Rolle.



> 2. wie sieht ein "richtiger" Controller aus,



Gegenfrage: Was unterscheidet denn einen "richtigen" von einem "falschen" Controller?



> 3. wohin stecke ich den Code für die Aktionen,



Kannst du auch halten wie ein Dachdecker. Manche basteön für jede Action ne eigene Klasse, die von AbstractActioon erweitert, manche benutzen eine innere Klasse die z.B. ActionListener implementiert, nen parametrisierten Konstruktor besitzt und damit sowas wie ein All-in-One-ActionAdapter ist... Manche schrieben für jede Action ne eigene innere Klasse die ActionListener implementiert.. 



> 4. welche Referenzen (bspw. auf die Modell-Klassen) übergebe ich von wem an wen, um Zirkel zu vermeiden,



Das ergibt sich aus dem Interfaces (siehe z.B. #addTreeModelListener() / #removeTreeModelListener() bei TreeModel).



> 5. wie viele verschiedene Controller-Klassen benötige ich,



Woher sollen wir das wissen?



> 6. wie funktioniert das mit den Listenern



RTFM



> Wenn jemand ein Beispiel kennt, das zudem keine externen Bibliotheken verwendet (insbesondere kostenpflichtige wie JGoodies nicht), wäre es extrem nett, einen Link darauf zu posten. Richtige Begeisterung käme bei einem gut dokumentierten Stück Software auf.



Völlig unangebracht von dir weil JGoodies in den Sourcen von BB für dich völlig irrelevant ist. Außerdem ist nicht alles, wo JGoodies draufsteht, kommerziell... Und "gut dokumentiert" ist für jeden was anderes. Du wirst kaum was finden, wo für Dööfchens nochmal ne Runde "Ich bin der Jean Pütz und heute erklär isch eusch ma wie das mit den Listenern funktionieren tut" erklärt ist.


----------



## AlArenal (2. Mrz 2006)

SamHotte hat gesagt.:
			
		

> Ist das Forum hier eigentlich zum helfen da oder zum profilieren?   :applaus:



Willst du was lernen, oder nur den vorgekauten Brei anderer schlucken?


----------



## SamHotte (2. Mrz 2006)

Danke, AlArenal. Du bist eine sehr große Hilfe. Wirklich herzlichen Dank. Falls du irgendwann mal von deinem hohen Roß herunterkommen solltest, sag Bescheid. Deine nutzlosen Beiträge a la "streng dich halt mehr an, sonst verdienst du es auch nicht" kannst du dir sparen, das bringt niemanden weiter.


----------



## AlArenal (2. Mrz 2006)

Na wieviel weiter bist du denn nun gekommen, seit du am 23.2. den Thread gestartet hast? Hat die Zeit nicht ausgereicht dir mal in Ruhe die einschlägigen und in diesem Forum x-mal erwähnten Online-Bücher reinzupfeifen und die Beispiele nachzuvollziehen?

Ich weiß echt nicht worauf du wartest... Das ist nicht wie früher bei Mama, wo man mit genug Nörgelei auch garantiert irgendwann seinen Willen durchsetzen konnte. Eine Woche ist wohl genug Zeit um sich die Antwort auf eine Frage wie "Wie funktioniert das mit den Listenern?" (dein Punkt 6) mal selbst zu suchen und zu erarbeiten. Bei solchen Sachen, die man auch hier im Forum (vom Rest des Netzes ganz zu schwiegen) zu tausenden findet, empfinde ich es auch als etwas dreist da noch ständig um noch ein weiteres Beispiel und noch eine weitere Erklärung zu bitten. 

Immerhin hast du dir erarbeitet, wie du dir aus nem CVS-Repository was ziehst, dann haste leider aufgegeben. Vielleicht wäre dieser Einsatz an anderer Stelle sinnvoller gewesen, dann hätte man sich hier einiges ersparen können. Ich hab kein Problem Leuten zu helfen, ich gebe auch in der Verwandtschaft Nachhilfe z.B. in Englisch und Mathe, aber wenn einer sich partout weigert, ....

Such dir ein Beispiel im Netz, exerzier es bis zur Vergasung durch, such dir nötigenfalls noch eins und noch eins. Und wenn du dann ne konkrete Frage dazu hast, stell sie. Die ganzen Basics sind doch überall zuhauf erklärt und wie sagt man so schön:
Es gibt nichts Gutes, außer man tut es!


----------



## SamHotte (2. Mrz 2006)

Viel weiter bin ich nicht gekommen, denn: dort, wo ich Zeit habe, habe ich keinen Zugriff auf CVS-Tools oder sonstiges (fette Firewall dazwischen). Daher hatte ich ja nach _Beispielen_ gefragt, die _einfach_ sind.

Es geht hier nicht um "Nörgeln" oder gar "Willen durchsetzen". Wenn du mir nicht helfen willst oder kannst, dann zwingt dich keiner. Du hast eine bestimmte Einstellung dazu, wie man etwas lernt. Schön für dich. Ich hingegen denke, dass meine Frage gezielt genug war um einzusehen, dass die vielen tausende Beispiele für mein spezielles Problem (nämlich dass ich etwas nicht kapiere, blicke, verstehe, raffe) eben _nicht_ geeignet waren. Du darfst mir glauben, dass ich mich nicht nur eine halbe Minute damit beschäftigt habe. Ja, ich habe sogar das F***ing Manual gelesen. Es reicht nicht, ich kapier es halt nicht, wie es funktioniert, daher ja die Bitte um ein Beispiel, das mehr als nur "Hello MVC" kann (aber einen nicht gleich mit > 800 Dateien erschlägt).

Ach ja: als "dreist" empfindest du es, dass ich nachfrage? Entschuldige bitte! Ich hatte das Gefühl, dass du die Originalfrage etwas aus den Augen verloren hattest, dann nachgelesen und festgestellt, dass ich sie wohl missverständlich formuliert hatte. Mea culpa, ich hatte wohl den Zweck eines Forums gründlich falsch eingeschätzt. Und - ganz ehrlich - ich hatte gehofft, es würde sich vielleicht jemand finden, der ein _anderes, einfaches_ Beispiel kennt. Offensichtlich Pech gehabt, Thema wird wegen Erfolglosigkeit geschlossen.


----------



## AlArenal (2. Mrz 2006)

SamHotte hat gesagt.:
			
		

> Ach ja: als "dreist" empfindest du es, dass ich nachfrage?



Bei Fragen die hier und andernorts schon unzählige Male durchgekaut wurden (siehe deinen Punkt 6) - ja! So und nicht anders habe ich es auch geschrieben, also bitte nicht so verdrehen, als würde ich generelles Fragen als Todsünde darstellen. Danke.


----------



## SamHotte (2. Mrz 2006)

Lies dir deine Antworten seit dem 1.03. noch mal durch - hab ich da wirklich etwas verdreht?


----------

