MVC s'applique-t-il uniquement au Web

14

C'est presque instantané chaque fois que je parle aux développeurs de Model View Controller ( MVC ), ils disent que vous faites une demande à une URL que le serveur crée une entité (MODEL) et vous fournit une représentation visuelle de ce modèle.

  • Cela signifie-t-il que MVC est uniquement pour le Web ou ai-je rencontré des gens qui ne sont que des développeurs qui utilisent MVC pour écrire des applications Web?

  • Existe-t-il des utilisations pour MVC sur des applications de style bureau?

  • Pour ma part, je suis nouveau dans le paradigme et je voudrais connaître tout super-ensemble à MVC

Deeptechtons
la source
1
avez-vous vérifié les wikis Programmers.SE ou Stack Overflow pour 'mvc'?
moucher
3
@gnat yes I did
Deeptechtons
6
eh bien, vous connaissez probablement déjà la réponse à votre question n'est-ce pas?
moucher
4
@gnat sérieusement NON, je suis totalement nouveau sur MVC (comme indiqué) et je n'ai jamais utilisé ou entendu (certaines oreilles que j'ai) sur MVC appliqué aux applications Windows ou utilisé une application qui arbore un badge MVC sur la page de téléchargements. Désolé si la question était idiote mais pour moi ça fait puzzle
Deeptechtons
Il y a beaucoup de bonnes ressources pour apprendre l'histoire de MVC mais je vois beaucoup cette idée fausse, j'ai donc écrit un joli résumé sur mon blog blog.kutulu.org/2012/01/mvc-mvp-mvvm-mvpvm-lmnop-wtf .html
KutuluMike

Réponses:

22

MVC est un modèle. Les modèles s'appliquent à toute la programmation. MVC fonctionne très bien dans un contexte Web.

Comme le souligne gnat, jetez un œil à la balise mvc et vous verrez plusieurs exemples de son implémentation.

Tom Squires
la source
5
C'est la clé. MVC fonctionne très bien dans les applications Web et c'est en grande partie la raison pour laquelle les frameworks modernes basés sur MVC (comme Rails, Django et ASP.NET MVC) sont si populaires. Il fonctionne également dans d'autres contextes (comme les applications de bureau), mais il est plus difficile de garder une séparation nette de la vue et du contrôleur, donc les variantes qui suppriment la séparation du contrôleur de vue comme Model-delegator (utilisé par Swing) ou changent où la division se produit comme Model-View-ViewModel (utilisé principalement par les applications .Net WPF) sont plus courants dans les applications de bureau.
Kevin Cathcart
Si vous regardez la description originale de Smalltalk de ce que fait un contrôleur - traduisez les entrées utilisateur en messages pour le modèle - Windows lui-même est fondamentalement un gros contrôleur; c'est pourquoi MVC en tant que modèle ne fonctionne pas très bien avec les applications Windows UI. Il est beaucoup plus utilisé dans les cadres d'interface utilisateur pour les systèmes non Windows.
KutuluMike
@MichaelEdenfield Pas vraiment; vous pouvez faire MVC et WinForms ensemble, bien que MVP y soit plus populaire, mais MVP est de toute façon une variante de MVC.
Andy
45

Étant donné que MVC date de 1977 et que le Web n'a été inventé qu'en 1991, il devrait être assez évident que MVC n'est pas uniquement destiné au Web.

Jörg W Mittag
la source
30
C'est un bon début de réponse, mais a un goût amer en bouche.
Nicolas C.
2
Correct et sarcastique. Super truc!
Tom Hawtin - tackline
1
"En 1982, la suite de protocoles Internet (TCP / IP) a été normalisée et le concept d'un réseau mondial de réseaux TCP / IP entièrement interconnectés appelé Internet a été introduit." wiki . Si vous voulez dire netscape, alors ok ... mais "le web" existait avant cela.
jmq
4
@jmquigley "Internet" et "le Web" sont deux choses très différentes.
Eric King
1
@jmq 1977 est cependant ENCORE avant 1982, et comme quelqu'un l'a souligné Web! = Internet. Le web n'existait vraiment pas avant 1991.
Andy
9

Non, le développement pour OS X et iOS utilise le modèle Model View Controller.

Holli
la source
2
Enfin, une réponse aux premier et deuxième points sans le commentaire.
JeffO
8

Posez la question dans un environnement Microsoft et beaucoup de gens penseront que vous voulez dire Asp.Net MVC qui est une implémentation MVC spécifiquement pour le Web.

Malheureusement, beaucoup de gens ne réalisent pas qu'il s'agit d'une implémentation du modèle MVC et pensent que ce sont des termes interchangeables, ce qui conduit à une hypothèse de "Web uniquement".

ozz
la source
3
+1 c'est le problème de nommer une plateforme d'après une méthodologie. Lorsque les gens sont initiés à la plateforme pour la première fois, ils ne voient pas la distinction.
MattDavey
@Ozz, cela a expliqué pourquoi les autres développeurs parlent toujours du Web lorsque MVC est le sujet
Deeptechtons
1
Veuillez arrêter de dépeindre les développeurs Microsoft comme stupides, merci.
Andy
@Andy - ce n'était pas un dénigrement de développeur MS, je suis moi-même un développeur Asp.Net MVC, et je maintiens la réponse originale. Je n'ai pas dit "tous" les gens, ou "tous" les développeurs .net, juste une observation d'une supposition ou d'une erreur que j'ai vu beaucoup de gens faire. Merci.
ozz
2

Pour autant que je sache, la première implémentation de MVC était dans Smalltalk. Il était définitivement présent dans Smalltalk-80. Bien que je n'ai pas de documentation à portée de main pour le prouver, je pense qu'il (ou quelque chose de similaire de toute façon) était dans Smalltalk depuis quelques années.

La plupart des frameworks OO GUI ont inclus au moins une variante de MVC. Je ne suis pas sûr, cependant, exactement ce que "surensemble" signifierait dans ce cas. Il est un peu difficile de dire si une variante donnée est un sur-ensemble, un sous-ensemble ou un pair de MVC, mais j'aurais tendance à considérer la plupart d'entre eux comme des pairs.

Dans tous les cas, beaucoup (la plupart?) D'entre eux ont été utilisés pour le développement de bureau, pas pour le développement Web. Grâce à certains anciens brevets AT&T, la plupart des systèmes de fenêtrage nécessitent des programmes pour pouvoir générer à nouveau des vues à la demande. Cela force (presque) au moins un certain degré de séparation entre le code qui maintient l'état actuel (le modèle) et le code qui affiche cet état (la vue). Cela laisse encore beaucoup de place à la variation dans 1) le degré auquel la fonctionnalité du contrôleur est isolée, et 2) les détails exacts de l'endroit où tracer les lignes entre chacune des pièces principales.

Jerry Coffin
la source
1

Non, cela s'applique même aux applications autonomes. Exemple Java Swing suit MVC.

Seshagiri TV
la source
1
Pourquoi le downvote la personne laissée vivre!
Deeptechtons
1

Il y a donc beaucoup de modèles de conception différents dans ce domaine.

  • Présentateur de vue de modèle (mvp)
  • Présentation de la vue du modèle (mvvp)
  • Modèle Vue Contrôleur
  • Modèle 2

etc. Au fil des ans, ceux-ci ont été entrelacés, mélangés, modifiés et appliqués dans une grande variété de contextes. Le point important ici, c'est que le modèle de conception MVC de 1977 a beaucoup changé et n'est plus le modèle de conception utilisé par les cadres Web côté serveur. À titre d'exemple dans l'implémentation smalltalk d'origine, le modèle observerait la vue des changements, ce qui n'est plus le cas car le côté serveur ne peut tout simplement pas observer les éléments html dans le navigateur des utilisateurs. Au lieu de cela, si la vue change, la vue enverra une demande au contrôleur qui mettra alors à jour la vue. Encore une fois, l'implémentation MVC d'origine n'est pas suivie, car une mise à jour du modèle impliquerait que toutes les vues dépendantes du modèle seraient mises à jour.

Les frameworks web modernes suivent une architecture simple à trois niveaux également connue sous le nom d'architecture Model 2.

Il existe bien sûr des exemples de véritables architectures MVC sur le Web, mais celles-ci sont souvent côté client uniquement, connectées à un serveur qui suit l'architecture Model 2, car les vues sont xml et json, et ne sont pas observées pour les modifications. Des exemples d'architectures mvc pures côté client sont Sencha Touch et Sproutcore.

Si vous avez MVC dans le navigateur, mvc comme sur le serveur et mvc comme couche de données, vous avez une implémentation mvc hiérarchique.

Remarque. Je n'ai parlé que des frameworks Web, d'autres implémentations de MVC telles que java swing et Flex ont d'autres différences d'implémentation.

Kjaer
la source
Cela n'a certainement aucun sens pourquoi les gens votent contre les autres, si quelque chose ne va pas, dites-le-leur et donnez-leur la possibilité de corriger leur point de vue. S'ils n'ont pas de connaissances sur le sujet, un bon professeur les dirigera vers la bonne source, ne le battra pas jusqu'à ce qu'il l'apprenne correctement !!
Deeptechtons
la question suppose que mvc et web fonctionnent bien ensemble et plaide pour non mvc web, donc quand vous ne donnez que des exemples de mvc dans un contexte web: -1
hildred
1

Une chose que vous devez savoir est qu'il existe autant de versions de MVC que de frameworks qui prétendent implémenter MVC.

La plupart s'accordent sur le fait que le modèle possède un état et que la vue le rend. Mais le contrôleur a des rôles très différents.

Dans Smalltalk, où il a été décrit pour la première fois, le modèle est au cœur de votre application, de vos données et de vos méthodes métier. La vue est une représentation graphique de l'état de l'application (alias modèle) et le contrôleur gère les événements d'entrée utilisateur, de souris et de clavier. Le contrôleur, par exemple, achemine les événements du clavier vers l'élément de vue qui a le focus.

Dans les pages .jsp, le modèle est principalement composé de données, la vue rend ce modèle au format HTML et le contrôleur effectue le routage du modèle vers la vue appropriée pour le rendre.

Donc, pour répondre à votre question, bien que MVC soit utilisé à la fois sur des applications autonomes (Java, .Net, Flex) et sur le Web (pages jsp), c'est une chose très différente. Cela signifie que le MVC que vous connaissez n'est pas utilisé dans les applications autonomes.

Florian F
la source