Einstieg in Model-View-Konzept
-
Ein existierendes anpassen hats nur, wenn in dem projekt schon welche da sind.
Aber dann sollten wir erst mal überlegen, was der grund für QTableView & model im gegensatz zu QTableWidget ist.
1.) Daten können in eigenen strukturen gehalten werden --> wieder verwendung der Daten schicht (wenn's sowas gibt)
2.) Zugriff auf die Daten ist einfacher (nicht immer TableWidget--> find --> get --> etc.)
3.) Erweiterbarkeit (neue features, neue zeilen/spalten, ...)
... (spontan fällt mir gerade nix ein) -
Für mich persönlich fallen die QxxxWidgets nicht unter den Punkt Model-View-Controller, das sind bequeme Klassen, die alles in einer Black-Box kapseln. Das ist prima für bestimmte Anwendungsfälle, hat aber wie gesagt für mich nichts mit MVC zu tun (wie's intern implementiert ist, tut da ja nichts zur Sache) - man hat (bis auf den Delegate) keinen Einfluss auf das Model und die View.
Wenn wir über Model-View-Controller reden, fängt das bei mir mit einem eigenen Model an. Ggf. erweitert man eine View (habe ich auch schon gemacht, weil die Default-Implementierung für uns nicht passt). Je nach Anwendungsfall hat man noch 'nen Delegate für's optische.
Die Frage ist auch, wo legt man das Einstiegslevel fest. Soll die Zielgruppe schon wissen, was MVC ist und wir vermitteln nur, wie man es mit Qt macht, oder müssen wir noch eine allgemeine Einführung dazu geben?
Vor einer klaren Abgrenzung wann man QxxView + eigenes Model verwenden soll und wann QxxWidget würde ich abraten. In der IT hängt da zu vieles vom "kommt darauf an" ab. Man kann natürlich Vor- und Nachteile angeben, Anwendungsbeispiele, etc. Die Entscheidung kann einem aber niemand abnehmen. In unserer Anwendung verwenden wir beides, je nachdem was gerade gemacht werden muss, und wie es einfacher zu lösen ist.
In diesem Zusammenhang wäre dann vielleicht ein eigenes Tutorial "Die QtxxWidget-Klassen erweitern" angebracht?
-
Ich will mal ganz und gar ehrlich sein. Das Pattern-Buch habe ich gelesen, das ist lang her. Als Katalog nützt es nicht wirklich zum Verständnis von Patterns im Allgemeinen. Später habe ich ein HeadFirst-Buch in die Hand bekommen, das Patterns (hauptsächlich mit Java-Bezug) erklärt. Mit dem bin ich zwar nicht durch (und zugegeben: es ist etwas flacher), aber durch diese Lektüre habe ich viel mehr behalten. Wirklich ein Lich ist mir dann mit dem "Büchlein von Helmut Leitner":http://www.mustertheorie.de/ aufgegangen, allerdings ist dieses dann wieder grundlegender.
Was MVC betrifft, bin ich - praktisch gesehen - wohl eher ein Neuling oder vielleicht ein unbewusster Anwender (ja ihr könnt mich gern jetzt auspfeifen). Aber ich habe es ehrlich mehrmals versucht, den Stoff zu raffen. Ist dann ein bisschen wie höhere Mathematik für mich: hochtrabende bis verstiegene Terminologie und kaum eine helfende Hand die einem daraus entgegenragt...
Deshalb würde ich auch einen Weg durch - simulierte - Erfahrung bevorzugen und von MVC überhaupt nur soviel hinein nehmen, dass es zum richtigen Anwenden von MV(D) mit Qt genügt. Theoretisch vollständig durchdringen kann man es ja später immer noch (und wird es bei ernsthafter Beschäftigung damit schließlich auch wollen).
O, nun ist es doch wieder eine ganz lange Antwort geworden - und bevor ich mich nun an ein Thema heranwage, in dem ich sicherlich ganz schön ins Schwitzen (und Schwimmen) kommen werde, mach ich jetzt besser mal was anderes (das ich auch schon in Aussicht gestellt habe und noch schuldig bin: die "Vorzüge der Ausnahmebehandlung":http://developer.qt.nokia.com/groups/qt_german/wiki/Wo_Ausnahmebehandlung_echt_hilft erklären, zumindest eine Notiz hinterlassen)
[edit] sehe gerade: MV-Stoffsammlung ist auch schon dort, gut! :)
-
[quote author="Panke" date="1294338902"]Zum Einstiegslevel: Nicht bei Adam und Eva anfangen. MVC kann man ja mal mit drei Sätzen anreißen, aber Zielgruppe sollten Programmierer sein, nicht die Berufsschulklasse im 1. Lehrjahr.[/quote] Dann versuch du mir mal diese Adam-und-Eva-Sache kurz und bündig zu verklickern. Eigentlich sah ich mich bislang nicht beratungsresistent ;) - nein wirklich, ganz ernthaft...
-
[quote author="Wolf P." date="1294348164"][quote author="Panke" date="1294338902"]Zum Einstiegslevel: Nicht bei Adam und Eva anfangen. MVC kann man ja mal mit drei Sätzen anreißen, aber Zielgruppe sollten Programmierer sein, nicht die Berufsschulklasse im 1. Lehrjahr.[/quote] Dann versuch du mir mal diese Adam-und-Eva-Sache kurz und bündig zu verklickern. Eigentlich sah ich mich bislang nicht beratungsresistent ;) - nein wirklich, ganz ernthaft...
[/quote]
Den Eindruck habe ich auch gar nicht. Mein Beitrag bezog sich auf Volkers Frage.
bq. Die Frage ist auch, wo legt man das Einstiegslevel fest. Soll die Zielgruppe schon wissen, was MVC ist und wir vermitteln nur, wie man es mit Qt macht, oder müssen wir noch eine allgemeine Einführung dazu geben?
Natürlich muss man einleitend ein paar Worte über MVC geben, wenn man ein Model-View-Framework beschreibt. Aber die Details, Diskussion der Vor- und Nachteile, Alternativen etc. sprengen meiner Meinung nach den Rahmen.
Das heißt natürlich nicht, dass man eine schlechtere Alternative (QxxWidget) zuerst präsentieren kann, um das Problem zu veranschaulichen, dass das Framework lösen soll.
-
[quote author="Panke" date="1294350629"] Das heißt natürlich nicht, dass man eine schlechtere Alternative (QxxWidget) zuerst präsentieren kann, um das Problem zu veranschaulichen, dass das Framework lösen soll. [/quote] Genau darauf wollte ich hinaus!
Ich glaube, dass ein An-die-Grenze-des-Machbaren-Stoßen wirklich stark motivieren kann. -
Das Problem ist, wenn ich es will, kann ich mit QXxxWidget verdammt weit kommen, nur wird es irgendwann immer schwerer. Wenn ich aber leicht anfange damit, kann ich immer wa shinzubauen. Iregndwann komme ich aber an die Grenze, wo es mit dem MV(D) Ansatz (von Anfang an benutzt) deutlich eleganter und günstiger wird.
Ich würde die Widgets gfleich weglassen in dem Tutorial. Ein Model ist im prinzip ganz einfach (ReadOnly, tabelle), wenn die Daten einmal gelesen werden und dann nur präsentiert.
-
Dann wäre es wohl gut, wir gingen dazu über, das von nun an als zwei Dinge zu betrachten.
Was meint ihr?Das MV(D) sollte dann vielleicht besser ein anderer vorantreiben, bei mir käme es ins stocken, wobei ich es definitiv begleiten werde, Review, Diskussion, Verbesserungen usw.
Das andere - das "Kaputt-Verbessern":http://de.wikipedia.org/wiki/Kaputt einer Widget-Lösung - würde ich dann übernehmen.
-
Ich kann mal sehen, ob ich dazu komme, aber das wird was größeres... also auch etwas dauern....
By the way, hier ein sehr "nettes pattern":http://sourceknights.blogspot.com/2010/12/normal-0-false-false-false.html :-)
-
[quote author="Gerolf" date="1294396200"]By the way, hier ein sehr "nettes pattern":http://sourceknights.blogspot.com/2010/12/normal-0-false-false-false.html :-)[/quote] :D Herrlich!
-
[quote author="Gerolf" date="1294396200"]By the way, hier ein sehr "nettes pattern":http://sourceknights.blogspot.com/2010/12/normal-0-false-false-false.html :-)[/quote]
Haha, super! Wusste ich doch, dass ich ständig Patterns verwende, ohne es zu wissen :-)
-
Das sieht hier alles sehr kompliziert aus. Wehre es zu nutzen, so für klein Leute wie mich, einfachere Tutorien zu erstellen?
Ein Beispiel http://zetcode.com/tutorials/wxwidgetstutorial/
zu Wolf P. Ich wollte nicht noch ein neues Thema machen, sollte die Antwort positive sein, dann fange Ich ein neues an.