En tant que programmeur sérieux, comment répondez-vous à la question Qu'est-ce que MVC?
Dans mon esprit, MVC est une sorte de sujet nébuleux - et pour cette raison, si votre auditoire est un apprenant, vous êtes libre de le décrire en termes généraux qui ne risquent pas de susciter la controverse.
Toutefois, si vous vous adressez à un public averti, en particulier à un intervieweur, j'ai du mal à penser à une direction à suivre qui ne risque pas une réaction du type "eh bien, ce n'est pas correct! ...". Nous avons tous une expérience différente du monde réel et je n'ai pas vraiment rencontré le même modèle d'implémentation MVC à deux reprises.
Plus précisément, il semble y avoir des désaccords concernant la rigueur, la définition des composants, la séparation des pièces (quelle pièce convient où), etc.
Alors, comment devrais-je expliquer MVC de manière correcte, concise et sans controverse?
la source
Réponses:
MVC est une architecture logicielle - la structure du système - qui sépare la logique domaine / application / entreprise (selon vos préférences) du reste de l'interface utilisateur. Pour ce faire, l'application est divisée en trois parties: le modèle, la vue et le contrôleur.
Le modèle gère les comportements fondamentaux et les données de l'application. Il peut répondre aux demandes d’informations, répondre aux instructions pour changer l’état de ses informations et même avertir les observateurs dans les systèmes événementiels lorsque les informations changent. Cela peut être une base de données, ou un nombre quelconque de structures de données ou de systèmes de stockage. En bref, il s’agit des données et de la gestion des données de l’application.
La vue fournit effectivement l'élément d'interface utilisateur de l'application. Les données du modèle seront rendues dans un formulaire adapté à l'interface utilisateur.
Le contrôleur reçoit les entrées de l'utilisateur et passe des appels aux objets du modèle et à la vue pour effectuer les actions appropriées.
Globalement, ces trois composants travaillent ensemble pour créer les trois composants de base de MVC.
la source
Analogie
J'ai expliqué MVC à mon père comme ceci:
MVC (Model, View, Controller) est un modèle d'organisation du code dans une application pour améliorer la maintenabilité.
Imaginez un photographe avec son appareil photo en studio. Un client lui demande de prendre une photo d'une boîte.
La boîte est le modèle , le photographe est le contrôleur et la caméra est la vue .
Parce que la boîte ne sait pas à propos de l'appareil photo ou du photographe, elle est complètement indépendante. Cette séparation permet au photographe de se déplacer dans la boîte et de diriger la caméra sous n’importe quel angle pour obtenir le plan / la vue qu’il souhaite.
Les architectures non-MVC ont tendance à être étroitement intégrées. Si la boîte, le contrôleur et la caméra étaient un seul et même objet, il faudrait alors séparer, puis reconstruire à la fois la boîte et la caméra chaque fois que nous souhaitions obtenir une nouvelle vue. En outre, prendre la photo serait toujours comme essayer de prendre un selfie - et ce n'est pas toujours très facile.
Explication détaillée
Ce n’est qu’après avoir lu la question / réponse mailliste suivante que j’ai eu l’impression de comprendre MVC. Citation: https://mail.python.org/pipermail/python-list/2006-January/394968.html
la source
MVC est principalement un mot à la mode.
Auparavant, elle était considérée comme un modèle, mais sa définition originale de 1979 a été simplifiée, transmise, mal interprétée, prise hors contexte. Il a été mal redéfini au point de ressembler à une religion et, bien que cela aide certainement les adeptes du transport de marchandises à la défendre, son nom ne s’associe plus à un ensemble de directives rigoureuses . En tant que tel, il ne peut plus être considéré comme un modèle.
MVC n'a jamais été conçu pour décrire des applications Web.
Ni les systèmes d'exploitation modernes, ni les langues.
(dont certains ont effectivement supprimé la définition de 1979)
C'était fait pour. Et ça n'a pas marché.
Nous traitons maintenant avec un hybride obscène web-mvc qui, avec son statut de mot à la mode terrifiant , sa définition médiocre , et ses programmeurs semi-illettrés comme cible démographique, fait une publicité vraiment mauvaise pour les modèles de logiciels en général.
MVC est donc devenu la séparation des préoccupations distillées pour les personnes qui ne veulent pas trop y penser.
Les sites Web / applications Web dans les années 90 n’avaient pas vraiment recours à la séparation des préoccupations.
C'étaient des botches horribles de code spaghetti mélangé.
Les modifications de l'interface utilisateur, les modifications de conception et les réarrangements des données ont été incroyablement difficiles, coûteux, longs, déprimants et malheureux.
Les technologies Web telles que ASP, JSP et PHP permettent trop facilement de mélanger les préoccupations de vue avec les données et les applications. Les nouveaux venus sur le terrain émettent généralement des boules de code inextricables, comme à leur époque.
Ainsi, un nombre croissant de personnes ont commencé à répéter "utiliser MVC" en boucle infinie sur les forums d'assistance. Le nombre de personnes a augmenté au point d'inclure les gestionnaires et les spécialistes du marketing (ce terme était déjà familier pour certains, depuis l'époque de la programmation gui, dans laquelle le modèle avait un sens) et cela devenait le monstre d'un mot à la mode auquel nous devons maintenant faire face. .
En l'état actuel des choses, c'est du bon sens , pas une méthodologie .
C'est un point de départ , pas une solution .
C'est comme dire aux gens de respirer de l' air ou de faire des redressements assis , pas un traitement curatif du cancer .
la source
It's a fancy word for pre-existing concepts that didn't really need one.
Et quel modèle / architecture de conception ne correspond pas à cette description?The data model is handled one way, the view in another, the rest is just named "controller"
+1La meilleure façon de le définir est de consulter les écrits originaux de Trygve Reenskaug , qui l’a inventé: http://heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html
Ce document, en particulier, est généralement considéré comme le texte de définition: http://heim.ifi.uio.no/~trygver/1979/mvc-2/1979-12-MVC.pdf
la source
MVC est un modèle de conception utilisé pour isoler la logique métier de la présentation.
Il diffère de beaucoup d'autres modèles de conception par le fait qu'il n'est généralement pas implémenté de manière succincte, mais constitue la base d'un cadre.
Bien qu'une application mettant en œuvre un modèle de stratégie ne constitue qu'un détail, elle est très déterminante de dire qu'une application Web utilise le modèle de conception MVC .
la source
MVC est une conception de logiciel qui sépare les composants suivants d'un système ou d'un sous-système:
la source
Je dirais que MVC est un concept ou une famille de modèles similaires.
Je pense que cet article vaut la peine d'être lu. Architectures GUI par Martin Fowler
la source
Tout d'abord, vous devez déterminer qui est le demandeur de la question et quel type de réponse il recherche. Vous répondez à cette question par une autre, telle que "Dans quel sens?"
Vous pouvez demander s’ils font référence à MVC en général, à une implémentation particulière de MVC (c’est-à-dire asp.net MVC, spring MVC, smalltalk MVC, etc.), de quoi s'agit-il techniquement, de quoi s'agit-il philosophiquement (oui, la philosophie aussi), etc.
S'il s'agit d'une question sur un test et que vous ne pouvez pas demander au demandeur de clarifier, vous devrez deviner en fonction du contexte.
Une bonne réponse simple est:
Vous pouvez également dire:
Mais, à la fin, vous serez jugé sur le fait que vous donniez la réponse attendue. La seule solution au problème est de savoir quel type de réponse ils attendent.
la source
Voici ce que je dirais à ce sujet. J'essaierais de l'expliquer en termes d'applications mobiles, parce que c'est ce que je connais le mieux et parce que je ne pense pas l'avoir bien comprise avant de commencer à faire des applications mobiles.
Prenons Android par exemple.
Couche de présentation, à savoir. l’interface utilisateur peut (devrait, le plus souvent est) être spécifiée entièrement en xml. Par souci de simplicité, supposons qu'un fichier XML décrive un écran de l'application. Le fichier XML spécifie les contrôles, la disposition des contrôles, le positionnement, les couleurs, la taille, les étiquettes de chaîne ... tout ce qui concerne la présentation. Pourtant, il ne sait pas quand il sera appelé, quand sera-t-il placé à l'écran. Sera-ce une mise en page autonome ou une partie d'une plus grande mise en page? Il vous en avez: votre parfaite VIEW .
Maintenant, la vue doit évidemment être placée à l'écran à un moment donné, alors comment faire? Votre contrôleur , dans Android appelé activité. Comme son nom l'indique, l'activité fait de l'activité. Même si son seul objectif est d'afficher la vue définie à l'étape 1, il effectuera une action. Ainsi, l'activité va chercher une vue et l'affiche à l'écran. Comme view ne sait rien de l'activité, de même l'activité ne sait rien de la présentation. Nous (les programmeurs) pourrions réorganiser la disposition de la vue plusieurs fois, sans changer même une ligne de code dans notre activité.
Désormais, il n’est pas très utile de présenter votre belle présentation xml brillante et bien définie sans réellement faire quelque chose. Disons que nous voulons stocker les données saisies par l'utilisateur. Activity doit s'attaquer à ce processus en prenant les données de l'utilisateur pour les transmettre à une autre personne (les traiter, les stocker, les supprimer). À qui passera-t-il? Eh bien, pour un modèle . J'aime penser à un modèle pur. classe java qui ignore tout du contexte d'application. (En pratique, ce ne sera presque jamais le cas).
Disons que j'ai une personne de classe qui a trois propriétés: nom, adresse, âge. Ma mise en page définie par XML comporte 3 champs de saisie utilisateur: nom, adresse et âge. Mon activité prend les trois valeurs de l'entrée utilisateur, crée un nouvel objet Personne et appelle une méthode dessus qui sait gérer une logique spécifique à une personne. Voilà. Modèle Vue Contrôleur.
la source
Je commence toujours par leur dire que le motif n'est pas nouveau et qu'il existe depuis de nombreuses années ... c'est à ce moment-là qu'ils me donnent un regard inquisiteur et que BAM !, ils sont accrochés:
Et puis, je parlerai assez bien des divers points comme les réponses précédentes, mais je pense qu’il est également important d’être contextuel, comme JB King l’a dit, ASP.NET MVC, etc.
la source