MVVM ViewModel vs MVC ViewModel
ViewModel est un terme qui est utilisé dans les deux MVVM (Model-View-ViewModel) et la mise en œuvre recommandée pour ASP.NET MVC. La recherche "ViewModel" peut prêter à confusion étant donné que chaque modèle utilise le même terme.
Quelles sont les principales différences entre le MVC ViewModel et MVVM ViewModel? Par exemple, je crois que le MVVM ViewModel est plus riche, compte tenu de l'absence d'un Contrôleur. Est-ce vrai?
Vous devez vous connecter pour publier un commentaire.
Un peu difficile de répondre à cette question, de façon succincte, mais je vais essayer. (Gardez à l'esprit que les réponses à ces types de questions sont encore un sujet de débat parmi les développeurs.)
MVC, le ViewModel fournit toutes les informations nécessaires pour une Vue à être rendus. Les données qu'il contient est créé à l'aide de données définis dans le Modèle. La Vue lit le ViewModel et rend la sortie. Entrée à partir de la Vue est transmis au Contrôleur, qui manipule le Modèle, construit approprié ViewModel, et l'envoie à la Vue pour le rendu.
Dans MVVM, le ViewModel sert la même fonction que dans MVC, mais il remplace également partie de la MVC Contrôleur en fournissant des commandes qui permettent à la Vue de manipuler le Modèle. WPF liaison de données gère la mise à jour de l'Affichage en fonction de changements dans le ViewModel (et cela remplace efficacement le reste de la fonction du Contrôleur MVC).
Il a été un moment depuis que j'ai joué Conception de l'INTERFACE utilisateur des Modèles de Bingo.. mais permettez-moi de prendre un coup de couteau lors de cette ...
MVVM est juste quelque chose que MS a trouver... car il vous aide à obtenir les la plupart hors de WPF. Vous combinez l'état et le comportement de la vue dans une classe (un modèle de présentation) qui est facilement testable + puis vous utilisez la liaison de données pour obtenir les données dans n'importe quelle vue.
Ce lien a une mémoire de l'évolution de MVVM. Combinez cela avec Fowler "GUI Architectures" de la série, et vous devriez être sur votre chemin.
Mise à jour: savais pas qu'il y a quelque chose qui s'appelle MVC-VM. Apparemment une idée de la ASP.NET MVC foule. Les regards et les sons similaires à MVVM (sauf à l'écoute pour ASP.NET MVC); la seule différence est qu'il impose une restriction qui n'est mappage 1:1 entre la VM et de la Vue. J'aurais deviné 1:N, mais tout le reste des matchs.
Je sais que c'est une (manière) la vieille question, mais j'ai été pointé comme un exemple d'utilisation de "Modèle de Vue" dans le contexte de la MVC. Je soutiens que cela est incorrect et peut conduire à la confusion par les gens qui sont nouveaux à l'un ou l'/les deux modèles. Celui qui est de le faire--stahp. Voici pourquoi (et c'est même une réponse à la question d'origine d'une manière détournée).
Un exemple de ce qui se passe peut être vu dans cette question. L'utilisateur est d'essayer d'utiliser un Modèle de Vue qui met en œuvre INotifyPropertyChanged dans un ASP.NET application MVC, ce brassage de bureau et apatrides web de la conception de l'application dans une architecture d'échouer et de chagrin.
Pour le mettre simplement, il n'y a pas de "Modèle de Vue" dans le modèle MVC. Il y est, cependant, un équivalent fonctionnel, et c'est le Contrôleur. Juste pour être clair sur les parties et leurs purpouses,
MVVM (applications de bureau):
MVC (applications web):
Le Modèle est pratiquement la même dans les deux modèles. Modèles de bureau peuvent mettre en œuvre l'événement de mise à jour des notifications, des Modèles web peut être dynamique (c'est à dire, pas fortement typé), et les deux peuvent ou peuvent ne pas inclure les méthodes de validation ou de métadonnées.
La Vue dans le bureau, est-ce que l'utilisateur voit. Dans le web, c'est un générateur qui génère le HTML pour les navigateurs d'afficher sur le côté client. Il doit interpréter l'interaction de l'utilisateur sur le bureau, mais sur le web, qui est géré par côté client en javascript, le navigateur, et les demandes qui sont envoyées vers le serveur.
Le Modèle de Vue/Contrôleur sont à peu près fonctionnellement équivalents, mais diffèrent grandement dans la façon dont ils sont mis en œuvre et comment ils fonctionnent. Dans le Modèle de Vue, l'interaction de l'utilisateur avec l'application, il est transféré à la Vue des Modèles via ICommands, les événements routés, et d'autres méthodes (de nombreux frameworks MVVM proposent différents modes de crochet Modèles de Vue de l'INTERFACE utilisateur et d'autres parties de l'application). Dans un Contrôleur, une demande avec toutes les informations nécessaires pour la commande pour retourner un résultat à l'utilisateur (en supposant que c'est un 200 OK demande). Le Contrôleur doit effectuer quel que soit le travail qui est nécessaire pour créer l'état (aka Modèle) nécessaire pour le générateur de code HTML (la Vue) pour créer la réponse. Conception-sage, le Contrôleur se trouve au-dessus de la Vue et le Modèle de connaître et de contrôler à la fois, tandis que le ViewModel est assis à côté de la Vue, en passant du Modèle (et autres informations) entre eux.
Ce qui semble vraiment à confondre des gens, c'est qu'il y a côté client MVVM cadres que vous pouvez mélanger dans votre application MVC. Ils existent uniquement en javascript dans le navigateur de l'utilisateur, et n'ont rien à voir avec ce modèle particulier que vous êtes sur le côté serveur. Vous pouvez exécuter un classique ASP site web qui utilise MVVM sur le côté client. L'enfer, vous pouvez exécuter des pages HTML statiques qui utilisent MVVM sur le côté client. Ils sont séparés.
Ces javascript frameworks MVVM généralement suivi une tendance similaire à l'ordinateur de bureau en utilisant le pattern MVVM décrit ci-dessus, mais ajusté pour un travail plus en accord avec la nature du DOM HTML et javascript. Par exemple, il n'y a pas de vaste système de reliure tissée dans les DOM et javascript a un très limitées type de système, de sorte à associer des modèles à des modèles est bien différent dans WPF. Ils ont aussi généralement travailler déconnecté du serveur, et quand ils ont besoin d'interagir, préférez les appels AJAX plutôt que de l'Affichage de la page vers le Contrôleur (appels AJAX sont généralement traitées par WebAPI Contrôleurs ASP.NET MVC).
Donc, pour résumer, il n'y a vraiment pas un Modèle de Vue en MVC. Le Contrôleur est l'équivalent, mais il est très différent dans la façon dont il reçoit la saisie de l'utilisateur, l'interprète, et renvoie un résultat à l'utilisateur. En utilisant le terme de "Modèle de Vue" pour faire référence à quoi que ce soit dans MVC ne peut que conduire à la confusion, et devrait donc être évitée. Utiliser les termes appropriés pour la bonne parties du motif. Il peut sembler pédant, mais il devrait aider à garder les choses au clair, et moins à confusion pour les gens qui sont nouveaux pour les deux modèles.