{"id":607,"date":"2010-03-15T10:52:59","date_gmt":"2010-03-15T08:52:59","guid":{"rendered":"http:\/\/www.do-as-i-say.com\/notes\/?p=607"},"modified":"2012-12-02T13:59:51","modified_gmt":"2012-12-02T11:59:51","slug":"mvc-symfony-explique-a-ma-maman-4","status":"publish","type":"post","link":"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/","title":{"rendered":"Symfony expliqu\u00e9 \u00e0 ma maman, 4\u00e8me partie : le MVC"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" class=\"alignleft size-thumbnail wp-image-618\" style=\"border: 1px solid black;\" title=\"L'homme et la machine\" src=\"http:\/\/www.do-as-i-say.com\/notes\/wp-content\/uploads\/man_machine-150x150.png\" alt=\"L'homme et le machine\" width=\"128\" height=\"128\" \/>Suite aux posts un peu laborieux sur les <a href=\"\/notes\/2009\/09\/design-patterns-symfony-explique-a-ma-maman-2\/\">design patterns<\/a> et le <a href=\"\/notes\/2009\/09\/decouplage-symfony-explique-a-ma-maman-3\/\" target=\"_blank\">d\u00e9couplage<\/a>, il est temps d&rsquo;\u00eatre (un peu plus) concret et de raconter la vie d&rsquo;un ami qui vous veut du bien : <strong>le MVC<\/strong>.<\/p>\n<p>Le MVC est un design pattern qui est l&rsquo;abr\u00e9viation de Mod\u00e8le-Vue-Contr\u00f4leur, et pour une fois, en anglais ou en fran\u00e7ais, \u00e7a fait les m\u00eames initiales (<em>Model-View-Controller<\/em>), donc y aura pas de d\u00e9bat sur comment qu&rsquo;on doit causer. On raconte que son cr\u00e9ateur se nomme Trygve Reenskaug, me demandez pas comment \u00e7a se prononce \u2014 son cr\u00e9ateur, ou disons son th\u00e9oricien, car comme souvent, on ne l&rsquo;avait pas forc\u00e9ment attendu pour op\u00e9rer de cette fa\u00e7on, mais il a mis des mots dessus (ce qui ne diminue pas l&rsquo;importance de son travail).<\/p>\n<p><!--more-->Pour tout dire, quiconque a fait seul dans son coin des sites web dynamiques en mettant un peu (beaucoup) les mains dans le cambouis des langages\/bases de donn\u00e9es\/exploitations multiples des m\u00eames informations, etc, a de fortes chances d&rsquo;avoir \u00e0 un certain niveau commenc\u00e9 \u00e0 appr\u00e9hender plus ou moins consciemment le MVC &#8211; ou alors, il a vraiment beaucoup gal\u00e9r\u00e9, et il est un petit peu d\u00e9c\u00e9d\u00e9 \u00e0 l&rsquo;heure qu&rsquo;il est.<br \/>\nMoi qui vous parle, enfin vous \u00e9crit, avant de lire quelques livres int\u00e9ressants sur le sujet et de d\u00e9couvrir des frameworks, j&rsquo;en \u00e9tais arriv\u00e9 \u00e0 travailler syst\u00e9matiquement avec d&rsquo;un c\u00f4t\u00e9 des m\u00e9thodes d&rsquo;acc\u00e8s aux informations (\u00e0 peu pr\u00e8s bien abstraites du syst\u00e8me de base de donn\u00e9es), de l&rsquo;autre des fichiers traitant les sorties (pour le web, pour le XML, pour des usages internes&#8230;), et au milieu un ou plusieurs points traitant les actions des utilisateurs et d\u00e9cidant ce qui devait \u00eatre mis en \u0153uvre.<\/p>\n<p>Bien s\u00fbr, n&rsquo;ayant pas conscience clairement des enjeux de cette division (faute entre autres d&rsquo;avoir mis des mots dessus ; d&rsquo;o\u00f9 l&rsquo;importance de nommer), il tra\u00eenait de nombreuses erreurs d&rsquo;organisation affaiblissant souvent pas mal l&rsquo;ensemble. Mais le fond \u00e9tait l\u00e0 : port\u00e9 par la <strong>n\u00e9cessit\u00e9 interne <\/strong>des traitements r\u00e9currents n\u00e9cessaires pour une application web, j&rsquo;avais fait un premier pas sans m\u00eame le savoir, tel le Monsieur Jourdain des design patterns, dans le monde merveilleux du MVC.<\/p>\n<h3>Le MVC, ou comment diviser pour mieux r\u00e9gner<\/h3>\n<p>Pr\u00e9cisons avant d&rsquo;aller plus loin que comme tout design pattern<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#footnote_0_607\" id=\"identifier_0_607\" class=\"footnote-link footnote-identifier-link\" title=\" Pour \u00eatre rigoureux, il faudrait dire que le MVC est en fait une combinaison de trois design patterns : composite, strat\u00e9gie, et observateur. Ceux que \u00e7a int\u00e9resse vraiment n&rsquo;ont qu&rsquo;\u00e0 se documenter, hein ; comme dirait l&rsquo;autre, STFW&#8230;\">1<\/a>]<\/sup>, MVC n&rsquo;est pas sp\u00e9cifiquement d\u00e9di\u00e9 \u00e0 une technologie, un langage ou quoique ce soit.<br \/>\nIl concerne de droit toute application avec une interface Homme-Machine, comme on dit (enfin, on dit IHM si on veut avoir l&rsquo;air au courant), et consiste en une sorte de paradigme de l&rsquo;organisation de l&rsquo;application, s\u00e9parant les donn\u00e9es et leur vie (mod\u00e8le), leur pr\u00e9sentation (vue), et la gestion des \u00e9v\u00e9nements (contr\u00f4leur).<\/p>\n<p>S\u00e9parer le mod\u00e8le et la vue repose sur une exigence au fond assez simple, qu&rsquo;on pourra sch\u00e9matiser comme suit : il faut traiter d&rsquo;un c\u00f4t\u00e9 le \u00ab\u00a0fond\u00a0\u00bb, de l&rsquo;autre la \u00ab\u00a0forme\u00a0\u00bb. Je recours aux guillemets, non pas pour pourrir la lecture, mais parce que l&rsquo;utilisation de ces deux termes et leur s\u00e9paration semblent aller de soi, or comme tout ce qui \u00ab\u00a0va de soi\u00a0\u00bb, elles m\u00e9ritent d&rsquo;\u00eatre questionn\u00e9es. Il est illusoire de croire qu&rsquo;il y aurait d&rsquo;un c\u00f4t\u00e9 du \u00ab\u00a0fond\u00a0\u00bb (du contenu, de la pens\u00e9e&#8230;) et de l&rsquo;autre de la \u00ab\u00a0forme\u00a0\u00bb (l&rsquo;expression, qu&rsquo;elle soit \u00e9crite, orale, artistique&#8230;)<br \/>\nAutant supposer qu&rsquo;on peut sans autre forme de proc\u00e8s s\u00e9parer la musique du son, ou l&rsquo;objet de sa manifestation \u2014 ce fantasme de s\u00e9paration n&rsquo;est en fait qu&rsquo;une autre version de l&rsquo;illusion platonicienne de la chose en soi, \u00ab\u00a0vraie\u00a0\u00bb chose dont le ph\u00e9nom\u00e8ne serait une version d\u00e9grad\u00e9e dans notre pauvre monde d&rsquo;apparences.<br \/>\nNon pas qu&rsquo;il n&rsquo;y ait pas un int\u00e9r\u00eat th\u00e9orique capital \u00e0 pouvoir <em>consid\u00e9rer<\/em> s\u00e9par\u00e9ment ces aspects ; mais dans la r\u00e9alit\u00e9, je vous le dis, croyez-moi sur parole<sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#footnote_1_607\" id=\"identifier_1_607\" class=\"footnote-link footnote-identifier-link\" title=\"C&rsquo;est une fa\u00e7on de parler, \u00e9videmment&#8230; Ne me croyez surtout pas sur parole\">2<\/a>]<\/sup>, le ph\u00e9nom\u00e8ne \u00e9puise tout ce qu&rsquo;il y a \u00e0 \u00eatre de la chose, et la forme, comme je l&rsquo;ai d\u00e9j\u00e0 formul\u00e9 dans une note pr\u00e9c\u00e9dente, et exactement <strong>forme de son fond et r\u00e9ciproquement<\/strong>. Bref. J&rsquo;ai clairement entam\u00e9 un autre post ici, qui verra peut-\u00eatre le jour une autre fois. Revenons \u00e0 nos moutons.<\/p>\n<p>Nos moutons sont le M, le V, et le C. Il n&rsquo;aura \u00e9chapp\u00e9 \u00e0 personne, du moins \u00e0 personne qui aura lu avec un minimum de concentration le <a href=\"\/notes\/2009\/09\/decouplage-symfony-explique-a-ma-maman-3\/\">billet pr\u00e9c\u00e9dent sur les prises \u00e9lectriques et les grille-pain<\/a><sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#footnote_2_607\" id=\"identifier_2_607\" class=\"footnote-link footnote-identifier-link\" title=\"J&rsquo;ai v\u00e9rifi\u00e9, \u00ab\u00a0grille-pain\u00a0\u00bb est invariable, au pluriel, \u00e7a ne bouge pas&#8230;\">3<\/a>]<\/sup> (mais je reconnais qu&rsquo;il faut du courage), qu&rsquo;une organisation isolant bien ces trois aspects d&rsquo;un programme est comme l&rsquo;arch\u00e9type du d\u00e9couplage.<br \/>\nVotre mod\u00e8le (en gros, les donn\u00e9es) peut changer de principe de stockage, de nature m\u00eame si \u00e7a vous chante, pour peu qu&rsquo;il soit correctement <em>interfac\u00e9<\/em> avec les autres couches du MVC, elles n&rsquo;y verront que du feu. Le centre nerveux de votre application (le contr\u00f4leur, qui r\u00e9agit aux actions de l&rsquo;utilisateur et distribue les r\u00e9ponses) peut de son c\u00f4t\u00e9 traiter n&rsquo;importe quel type d&rsquo;entr\u00e9es et rediriger les sorties vers n&rsquo;importe quel affichage, i.e. les vues. Vues qui de leur c\u00f4t\u00e9 se contentent de mettre en forme (grosso modo) des informations, ind\u00e9pendamment de leur origine. J&rsquo;ai failli dire \u00ab\u00a0se contentent d&rsquo;<em>afficher\u00a0\u00bb<\/em>, mais en fait, contrairement \u00e0 ce que son nom laisse croire, une \u00ab\u00a0vue\u00a0\u00bb au sens du MVC ne r\u00e9sulte pas n\u00e9cessairement en quelque chose de&#8230; visuel. Une vue peut-\u00eatre par exemple un fichier XML, qui vivra sa vie ensuite selon le client (au sens informatique) qui l&rsquo;a requis.<\/p>\n<h3>Quand l&rsquo;intelligence gagne la mati\u00e8re<\/h3>\n<p>L&rsquo;int\u00e9r\u00eat tr\u00e8s concret de l&rsquo;application du MVC est qu&rsquo;il isole les op\u00e9rations, donc que chacun n&rsquo;a \u00e0 s&rsquo;occuper que de sa partie. Et comme dans la vie, c&rsquo;est toujours mieux quand chacun ne s&rsquo;occupe que de ce qui le regarde. Dans ma Normandie natale, on dit \u00ab\u00a0<em>Chacun son champ, les vaches sont bien gard\u00e9es<\/em>\u00ab\u00a0. Eh bien on ne peut mieux formuler le principe du MVC.<br \/>\nEn termes de d\u00e9veloppement, cette division conceptuelle vise \u00e0 organiser les r\u00f4les par fonction, et \u00e0 <strong>traduire les diff\u00e9rences de nature en s\u00e9parations op\u00e9rationnelles<\/strong>. Comme si on faisait rentrer dans la chair du code, qui a priori n&rsquo;en a que faire, un peu du sens des objets qu&rsquo;on manipule. En contre-partie, dans un effet de r\u00e9sonance s\u00e9mantique, j&rsquo;irais bien jusqu&rsquo;\u00e0 dire : de r\u00e9compense s\u00e9mantique, le code, initialement \u00ab\u00a0b\u00eate\u00a0\u00bb, gagne en intelligence d&rsquo;organisation et d&rsquo;\u00e9volution. Risquons la formule : <em>bien utiliser le MVC, c&rsquo;est insuffler de l&rsquo;\u00e2me dans la mati\u00e8re. <\/em>Ouaip. Pas moins.<\/p>\n<p>L&rsquo;ultime int\u00e9r\u00eat, non des moindres, est p\u00e9dagogique : en s&rsquo;effor\u00e7ant d&rsquo;appliquer cette discipline de conception et d&rsquo;impl\u00e9mentation, on s&rsquo;oblige \u00e0 bien comprendre ce qui fait quoi dans son application. Et croyez-moi, c&rsquo;est pas de la tarte.<br \/>\nMais, une fois encore, une bonne m\u00e9thode appliqu\u00e9e avec constance finit par insuffler plus que du m\u00e9canisme, et cr\u00e9e de l&rsquo;intelligence. Et pas que dans le code. Dans le codeur \u00e9galement. C&rsquo;est toute la puissance de la <em>m\u00e9thodologie<\/em><sup>[<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#footnote_3_607\" id=\"identifier_3_607\" class=\"footnote-link footnote-identifier-link\" title=\"S&rsquo;il est besoin de le pr\u00e9ciser : je crois en la vertu de la m\u00e9thode et des m\u00e9thodologies bien pens\u00e9es. Je ne crois m\u00eame qu&rsquo;\u00e0 \u00e7a. Enfin non, \u00e7a n&rsquo;est pas vrai. Je crois en l&rsquo;intuition et l&rsquo;inspiration, parce que j&rsquo;en ai vu, et m\u00eame par (rare) fois exp\u00e9riment\u00e9. Mais l&rsquo;intuition n&rsquo;est rien sans le travail qui suit.\">4<\/a>]<\/sup> : des id\u00e9es r\u00e9gulatrices qui <em>dirigent vers <\/em>un endroit. Et m\u00eame si on ne sait pas pr\u00e9cis\u00e9ment o\u00f9 est l&rsquo;endroit, on peut travailler \u00e0 avancer dans la bonne direction, et \u00e0 bien arpenter le <strong>chemin<\/strong>.<br \/>\nCar pour finir sur une touche \u00e9tymologique du meilleur aloi, c&rsquo;est pr\u00e9cis\u00e9ment de l\u00e0 que vient le mot <em>m\u00e9thode<\/em> : \u03bc\u03ad\u03b8\u03b1 (<em>m\u00e9ta<\/em>, qui suit) \u03bf\u03b4\u03cc\u03c2 (<em>odos<\/em>, le chemin).<\/p>\n<p>___________________________________<\/p>\n<p><em>Image emprunt\u00e9e ici : <a href=\"http:\/\/www.marriedtothesea.com\/archives\/2007\/Aug\/\" target=\"_blank\">http:\/\/www.marriedtothesea.com\/archives\/2007\/Aug\/<\/a><\/em><\/p>\n________________________________________________\r\n<br\/><ol class=\"footnotes\"><li id=\"footnote_0_607\" class=\"footnote\"> Pour \u00eatre rigoureux, il faudrait dire que le MVC est en fait une combinaison de trois design patterns : <strong>composite<\/strong>, <strong>strat\u00e9gie<\/strong>, et <strong>observateur<\/strong>. Ceux que \u00e7a int\u00e9resse vraiment n&rsquo;ont qu&rsquo;\u00e0 se documenter, hein ; comme dirait l&rsquo;autre, STFW&#8230; [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#identifier_0_607\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_1_607\" class=\"footnote\">C&rsquo;est une fa\u00e7on de parler, \u00e9videmment&#8230; Ne me croyez <em>surtout pas<\/em> sur parole [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#identifier_1_607\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_2_607\" class=\"footnote\">J&rsquo;ai v\u00e9rifi\u00e9, \u00ab\u00a0grille-pain\u00a0\u00bb est invariable, au pluriel, \u00e7a ne bouge pas&#8230; [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#identifier_2_607\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><li id=\"footnote_3_607\" class=\"footnote\">S&rsquo;il est besoin de le pr\u00e9ciser : je crois en la vertu de la <strong>m\u00e9thode<\/strong> et des m\u00e9thodologies bien pens\u00e9es. Je ne crois m\u00eame qu&rsquo;\u00e0 \u00e7a. Enfin non, \u00e7a n&rsquo;est pas vrai. Je crois en l&rsquo;intuition et l&rsquo;inspiration, parce que j&rsquo;en ai vu, et m\u00eame par (rare) fois exp\u00e9riment\u00e9. Mais l&rsquo;intuition n&rsquo;est rien sans le travail qui suit. [<a href=\"https:\/\/www.do-as-i-say.com\/notes\/2010\/03\/mvc-symfony-explique-a-ma-maman-4\/#identifier_3_607\" class=\"footnote-link footnote-back-link\">&#8617;<\/a>]<\/li><\/ol>","protected":false},"excerpt":{"rendered":"<p>Suite aux posts un peu laborieux sur les design patterns et le d\u00e9couplage, il est temps d&rsquo;\u00eatre (un peu plus) concret et de raconter la vie d&rsquo;un ami qui vous veut du bien : le MVC. Le MVC est un design pattern qui est l&rsquo;abr\u00e9viation de Mod\u00e8le-Vue-Contr\u00f4leur, et pour une fois, en anglais ou en [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20],"tags":[42,21,22,65,55],"class_list":["post-607","post","type-post","status-publish","format-standard","hentry","category-trucs-expliques-a-ma-maman","tag-design-patterns","tag-framework","tag-methodologie","tag-mvc","tag-symfony"],"_links":{"self":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/607","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/comments?post=607"}],"version-history":[{"count":56,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/607\/revisions"}],"predecessor-version":[{"id":1118,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/posts\/607\/revisions\/1118"}],"wp:attachment":[{"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/media?parent=607"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/categories?post=607"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.do-as-i-say.com\/notes\/wp-json\/wp\/v2\/tags?post=607"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}