J'étudiais le modèle de conception du contrôleur de la vue et je comprends le concept derrière le motif théorotique, mais je voulais jeter un coup d'œil à la façon dont on le mettrait en pratique.
Wikipedia mentionne WT - Toolkit Web, CPPCMS et d'autres implémentations standard qui utilisent le modèle, mais je ne les connaissais pas, et j'espérais juste et
Sera vraiment reconnaissant si quelqu'un peut fournir un code d'échantillon (espérons-le, C ++) qui met en œuvre le motif et explique la théorie du modèle mis en pratique. p>
4 Réponses :
Un simple éditeur de texte pourrait être conçu sur la base de MVC. Pensez à la classe code> de la classe code> comme modèle, où les données sont stockées. Nous pourrions avoir une classe appelée SimpleTextView code> qui affiche le texte dans la chaîne code> code> ci-joint, telle qu'elle est. Une classe appelée KeyboarderEventHandler code> peut agir en tant que contrôleur. Le contrôleur informera la vue sur les nouveaux événements du clavier. La vue modifie à son tour le modèle (comme l'annexe ou le suppression du texte). Les modifications du modèle se reflètent sur toutes les vues attachées à elle. Par exemple, il pourrait y avoir une autre vue appelée htmlview code> ci-joint à la chaîne code> objet manipulée dans le SimpleTextView code>. Si l'utilisateur entre dans des balises HTML valides dans le code> SimpleTextView code>, le htmlView code> affichera la sortie formatée - en temps réel. P>
Il y a quelques exemples de MVC complets, plus la discussion, dans la CH 2 d'une introduction à la programmation à Python 3.x que j'ai écrit (je n'ai pas terminé CH3, etc., ce projet a été sur la glace depuis un certain temps - - La communauté python aime vraiment l'essaim d'abeilles en colère lors de la découverte que j'avais écrit que Python n'était peut-être pas approprié pour un développement très volumineux, il est donc devenu difficile d'obtenir des commentaires raisonnables). Il est disponible au format PDF à partir de Google Docs . Je ne sais pas à quel point il est en mesure de connaître les implémentations MVC communes, j'inquiétais principalement l'idée générale. : -) p>
acclamations et hth., p>
PS: Il y a une belle table de matières dans le fichier PDF, mais Google Docs ne le montre pas. Vous auriez besoin de dl et d'utiliser Foxit ou Acrobat ou un autre visualiseur PDF. Je pense qu'il y a une toc visible distinct chez Google Docs, cependant, je n'ai pas vérifié et ne vous souvenez pas si mis à jour. P>
PPS: oublié de mentionner, l'exemple de traitement de l'image MVC près de la fin a une belle photo de Lena Söderberg! :) p>
Voici un exemple rapide que j'ai fait (je n'ai pas essayé de le compiler, laissez-moi savoir s'il y a des erreurs): ignorant la mise en oeuvre du bouton, ce programme utilisera graphgui à afficher Un graphique qui va changer lorsqu'un bouton est enfoncé. Disons que c'est un graphe à barres et il deviendra plus grand. P> puisque le modèle est indépendant de la vue (le bouton), et le contrôleur gère la communication entre les deux, cela suit le motif MVC. p> Lorsque vous cliquez sur le bouton, le contrôleur modifie le modèle via la fonction OnButtonClicked, que la classe de boutons sait à appeler lorsqu'il est cliqué. P> La beauté de ceci est depuis le modèle et la vue Sont complètement indépendants, la mise en œuvre de chacun peut changer considérablement et cela n'affectera pas l'autre, le contrôleur pourrait simplement avoir à faire quelques modifications. Si le modèle dans ce cas a calculé certains résultats basés sur certaines données de base de données, puis cliquez sur le bouton pourriez-vous entraîner que cela se produise, mais la mise en œuvre des boutons n'aurait pas à modifier. Ou, au lieu de dire au contrôleur lorsqu'un clic se produit, il peut peut-être indiquer au contrôleur lorsque le bouton est broyé. Les mêmes changements sont appliqués au modèle, peu importe ce qui a déclenché les modifications. P> P>
En MVC, la vue n'est généralement pas au courant du contrôleur. En règle générale, le contrôleur serait conscient du modèle et de la vue et fournirait la vue avec l'instance appropriée du modèle. Comme vous l'avez mentionné, le modèle serait ignoré de la vue.
@ Matt, robdev: le modèle n'est pas au courant de la vue, mais le modèle peut intimer la vue de la mise à jour dans ses données .. Utilisation typique du modèle d'observateur)
@Matt, eh bien je vois votre point, mais dans cet exemple, la vue ne connaît pas explicitement sur le contrôleur. Il suffit de donner un pointeur d'objet et de fonction et dit: "Qui que vous soyez, j'ai été simplement cliqué! Appelez votre fonction" et OnbuttonClicked () est ensuite appelé.
S'il y avait un bouton "Draw Graph" qui déclenchera la fonction graphgui :: onebuttonclick () code> fonction et un panneau de message avec un graphgui :: showMessage () code> qui est supposé Pour afficher le texte "Dessin du graphique ...", dans lequel scénario le graphgui :: showMessage () code> est appelé? 1) graphgui :: onebuttonclick () code> appelle directement graphgui :: showMessage () code>. 2) GRAPHGUI :: OnbuttonClick () CODE> Appels GraphController :: OnbuttonClicked () Code>, puis GraphController :: OnbuttonClicked () Code> Appels : ShowMessage () code>.
Ne compilera pas: voir _button code> vs __ bouton code> etc., etc. ne peuvent pas être utilisés comme identifiants avec des traits de soulignement adjacents sont réservés. De plus, GRAPGUI semble avoir une crise d'identité. Est-ce une interface graphique? Ensuite, c'est une vue et ne devrait pas posséder / connaître le modèle / contrôleur. Pourtant, il semble que l'essaie de faire partie du contrôleur en même temps et de posséder le «autre» contrôleur et le modèle - et pire - par dynamic allocation et brut Nouveau code> / Supprimer < / code> qui sont très probablement inutiles. Pour moi (a) la propriété n'est pas nécessairement nécessaire du tout, mais (b) s'il ya une raison, il ne doit pas être fait à la vue, uniquement par le contrôleur
code est la meilleure approche pour comprendre et apprendre le contrôleur d'affichage du modèle:
Voici un exemple JS simple (de wiki ) p> voici un poste détaillé en C / C ++
Model-View-contrôleur expliqué dans C ++ p> < p>
p> p>