1285 votes

Quelle est la différence entre MVC et MVVM ?

<p>Y a-t-il une différence entre le modèle « Model View Controller » standard et le modèle Model/View/ViewModel de Microsoft ?</p>

672voto

TrueBlueAussie Points 26794

Désolé d'avoir à être en désaccord avec une telle fortement voté réponse, mais ce Dernier n'est pas nécessairement remplacer la nécessité de séparer les Contrôleurs.

Le problème est: qu'indépendamment testable*, et surtout réutilisable en cas de besoin, à la vue du modèle n'a aucune idée de ce que la vue est de l'afficher, mais plus important encore aucune idée de l'endroit où ses données sont à venir à partir de.

*Remarque: dans la pratique, les Contrôleurs de supprimer la plupart de la logique, à partir de ce Dernier, qui nécessite des tests unitaires. La machine virtuelle devient alors un muet conteneur qui nécessite peu d', le cas échéant, les essais. C'est une bonne chose que la VM est juste un pont, entre le designer et le codeur, ce qui devrait être simple.

Même dans MVVM, les contrôleurs contiennent généralement tous les traitement de la logique et de décider quelles sont les données à afficher dans lequel les vues à l'aide de laquelle les modèles de vue.

À partir de ce que nous avons vu jusqu'à présent, le principal avantage de ce Dernier motif pour supprimer le code de code XAML-derrière pour faire XAML de l'édition d'un plus de travail indépendant. Nous avons encore de créer des contrôleurs, en tant que de besoin, de contrôle (sans jeu de mots est destiné) la logique d'ensemble de nos applications.

La base MVCVM directives nous suivre sont les suivantes:

  • Vues d'afficher une certaine forme de données. Ils n'ont aucune idée d'où proviennent les données.
  • Viewmodel tenir une certaine forme de données et de commandes, ils ne savent pas où les données ou le code, vient ni comment il est affiché.
  • Les modèles contiennent des données réelles (différents contextes, de stocker ou d'autres méthodes)
  • Les contrôleurs d'écouter, et de publier, d'événements. Contrôleurs de la logique qui contrôle ce que les données sont vu et où. Les contrôleurs de fournir le code de commande pour le ViewModel de sorte que le ViewModel est réellement réutilisable.

Nous avons également noté que la Sculpture de code-gen cadre met en œuvre MVVM et un modèle similaire à Prisme ET il a également fait un large usage des contrôleurs de séparer tous les cas d'utilisation de la logique.

En principe, je serais invitent à la prudence en supposant que les contrôleurs sont rendues obsolètes par la Vue-des modèles.

J'ai commencé un blog sur ce sujet que je vais ajouter au fur et à mesure quand je peux. Il y a des problèmes avec la combinaison MVCVM avec le commun des systèmes de navigation, comme la plupart des systèmes de navigation juste utiliser des Vues et des machines virtuelles, mais je vais aller dans les articles plus tard.

Addendum:

Un avantage supplémentaire de l'utilisation d'un MVCVM modèle est que seuls les objets contrôleur besoin d'exister dans la mémoire pour la durée de vie de l'application et les contrôleurs contiennent principalement de code et de peu de données sur l'état (c'est à dire de minuscules surcharge de la mémoire). Cela fait beaucoup moins de mémoire intensive des applications que des solutions où la vue-des modèles doivent être conservés et il est idéal pour certains types de développement mobile (par exemple, Windows Mobile à l'aide de Silverlight/Prisme/MEF). Cela n'est évidemment dépendent du type d'application que vous pouvez encore avoir besoin de conserver les occasionnels en cache VMs pour la réactivité.

261voto

Lumi Points 6399

Je pense que la façon la plus simple de comprendre ce que ces acronymes sont censés dire, c'est de les oublier pour un moment. Au lieu de cela, pensez à ce logiciel ils sont originaires, chacun d'entre eux. - Il vraiment se résume simplement la différence entre le début de la web et le bureau.

Le premier acronyme, MVC, apparu sur le web. (Oui, il peut avoir été là avant, mais le web est de savoir comment il a obtenu popularisé à la masse des développeurs web.) Pense que la base de données, les pages HTML et de code entre les deux. Nous allons affiner ce juste un peu pour arriver à la MVC: Pour la »base de données«, supposons que la base de données de plus le code de l'interface. Pour »des pages HTML«, supposons modèles HTML, en plus de modèle de code de traitement. Pour le code de »in-between«, supposons code de mappage d'utilisateur clique pour les actions, qui peuvent affecter la base de données, certainement à l'origine d'un autre point de vue est affiché. C'est ça, au moins pour les fins de cette comparaison.

Nous allons retenir les services d'une fonctionnalité de ce site web des choses, et non pas comme il est aujourd'hui, mais comme il en existait il y a dix ans, quand le Javascript est un plus humbles, les plus ignobles de l'agacement, les programmeurs ont bien fait pour orienter clairement de: La page HTML est essentiellement muet et passif. Le navigateur est un client léger, ou si vous voulez, un mauvais client. Il n'y a aucune intelligence dans le navigateur. Pleine page de la recharge de la règle. La »vue« est généré à chaque fois autour de.

Rappelons que ce web, en dépit de être à la mode, était horriblement arrière et un retard par rapport à l'ordinateur de bureau. Les applications de bureau sont de la graisse des clients ou des clients riches, si vous voulez. (Même un programme comme Microsoft Word peut être considéré comme venir type de client, un client pour les documents.) Ils sont les clients est pleine d'intelligence, plein de connaissances à propos de leurs données. Ils sont dynamiques. Ils en cache les données qu'ils sont la manipulation de la mémoire. Aucun de ces de la merde comme une pleine page de relaod.

Et cette riche de bureau moyen est probablement là où la seconde provient de l'acronyme, MVVM. Ne vous laissez pas berner par les lettres, par l'omission de la C. Contrôleurs sont toujours là. Ils ont besoin de l'être. Rien n'est supprimé. Nous venons d'ajouter une chose: statefulness, les données mises en cache sur le client (et avec elle l'intelligence de traiter ces données). Que les données, essentiellement, un cache sur le client, maintenant, est appelée »ViewModel«. C'est ce qui permet aux riches de l'interactivité. Et c'est tout.

  • MVC = modèle, contrôleur, vue = essentiellement un moyen de communication = faible interactivité
  • MVVM = modèle, contrôleur de cache, view = communication dans les deux sens = riche interactivité

Nous pouvons voir qu'avec le Flash, Silverlight, et - plus important encore - le Javascript, le web a embrassé MVVM. Les navigateurs ne peuvent plus être légitimement appelé clients légers. Regardez leur programmabilité. Regardez leur consommation de mémoire. Regardez tous les Javascript de l'interactivité sur le web moderne pages.

Personnellement, je trouve cette théorie et de l'acronyme entreprise plus facile à comprendre en regardant ce qu'il parle dans la réalité concrète. Les concepts abstraits sont utiles, en particulier lorsqu'il est démontré sur le béton de la matière, de sorte que la compréhension peut la boucle est bouclée.

176voto

TStamper Points 17163

MVVM Model-View ViewModel est similaire à la MVC, Modèle-Vue-Contrôleur

Le contrôleur est remplacé par un Modèle de Vue. Le Modèle de Vue se trouve en dessous de la couche d'INTERFACE utilisateur. Le Modèle de Vue expose les données et les objets de commande que le point de vue des besoins. Vous pourriez penser à cela comme un objet de conteneur de ce point de vue va à obtenir de ses données et ses actions. Le Modèle de Vue tire ses données à partir du modèle.

Russel Est un blog de discuter plus en détail Pourquoi est MVVM est différent de MVC

91voto

Chris Ballance Points 17329

Pour une chose, MVVM est une évolution du modèle MVC qui utilise le code XAML pour gérer l'affichage. Cet article décrit quelques-unes des facettes de la deux.

L'objectif principal du Modèle/Vue/ViewModel l'architecture semble être sur le dessus de la données ("Modèle"), il y a une autre couche de composants non visuels ("le ViewModel") qui correspondent les notions de données de plus près les concepts de l'affichage des données ("la Vue"). C'est de ce Dernier que la Vue se lie à, pas le Modèle directement.

45voto

George R Points 1033
<p>J’ai trouvé l’une des principales différences que dans MVC, votre V lit votre M directement et passe par le C pour manipuler les données, tandis que dans MVVM, votre VM agit comme un proxy M, ainsi que fournir les fonctionnalités disponibles vous V.</p> <p>Si je ne suis pas plein d’ordure, je suis surpris que personne n’a créé un hybride, où votre VM est simplement un proxy M et C fournit toutes les fonctionnalités.</p>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X