web-dev-qa-db-fra.com

Quelle est la différence entre le modèle de conception MVC, MVP et MVVM en termes de codage c #

Si nous cherchons dans Google en utilisant la phrase "Quelle est la différence entre les modèles de conception MVC, MVP et MVVM", il se peut que nous n'obtenions que peu d'URL décrivant la différence entre les modèles de conception MVC MVP et MVVM théoriquement comme :

MVP

À utiliser dans des situations où la liaison via un contexte de données n'est pas possible. Windows Forms en est un parfait exemple. Afin de séparer la vue du modèle, un présentateur est nécessaire. La vue ne pouvant pas être directement liée au présentateur, les informations doivent être transmises à la vue via une interface (IView).

MVVM

Utilisez-le dans des situations où la liaison via un contexte de données est possible. Pourquoi? Les différentes interfaces IView pour chaque vue sont supprimées, ce qui signifie moins de code à maintenir. Parmi les exemples de MVVM possibles, citons les projets WPF et javascript utilisant Knockout.

MVC

À utiliser dans des situations où la connexion entre la vue et le reste du programme n’est pas toujours disponible (et que vous ne pouvez pas utiliser efficacement MVVM ou MVP). Cela décrit clairement la situation dans laquelle une API Web est séparée des données envoyées aux navigateurs clients. ASP.NET MVC de Microsoft est un excellent outil pour gérer de telles situations et fournit une infrastructure MVC très claire


Mais je n'ai trouvé aucun article traitant de la différence théorique avec un exemple de code.

Ce serait vraiment bien si je recevais un article décrivant la différence entre ces 3 modèles de conception (MVC, MVP et MVVM) et le code.

Je voudrais mettre la main sur le code source de 3 applications similaires CRUD qui ont été implémentées par ces trois modèles de conception (MVC, MVP & MVVM). Pour que je puisse parcourir le code et comprendre comment on doit écrire du code pour ces trois modèles de conception (MVC, MVP & MVVM).

Donc, si un tel article existe et explique en quoi le code aurait une apparence différente pour ces 3 modèles de conception (MVC, MVP et MVVM), veuillez me rediriger vers cet article.

187
Thomas

This devrait être un bon débutant. En réalité, la "plateforme" de votre choix joue également un rôle important dans la manière dont vous utilisez ces modèles. Par exemple, MVVM est naturellement adapté à WPF, tandis que MVP fonctionne bien avec Windows Forms. ASP.Net MVC parle pour lui-même.

60
David Osborne

Certaines différences fondamentales peuvent être écrites en bref:

MVC:

MVC traditionnel est où il y a un

  1. Modèle: sert de modèle pour les données
  2. Vue: Offre la vue à l'utilisateur qui peut être l'interface utilisateur
  3. Contrôleur: contrôle l’interaction entre Modèle et Vue, où vue appelle le contrôleur pour mettre à jour le modèle. View peut appeler plusieurs contrôleurs si nécessaire.

MVP:

Semblable au MVC traditionnel mais Controller est remplacé par Presenter. Mais contrairement à Controller, le présentateur est également responsable de la modification de la vue. La vue n'appelle généralement pas le présentateur.

MVVM

La différence ici est la présence de View Model. C'est en quelque sorte une implémentation de Observer Design Pattern, dans lequel les modifications du modèle sont également représentées dans la vue, par la machine virtuelle. Exemple: si un curseur est modifié, non seulement le modèle est mis à jour, mais les données qui peuvent être du texte, qui sont affichées dans la vue, sont également mises à jour. Il existe donc une liaison de données bidirectionnelle.

90
Pritam Banerjee

MVC, MVP, MVVM

MVC (ancien)

MVP (plus modulaire en raison de son faible couplage. Presenter est un médiateur entre View et Model)

MVVM (vous avez déjà une liaison bidirectionnelle entre VM et le composant d'interface utilisateur, elle est donc plus automatisée que MVP) enter image description here

Une autre image: enter image description here

33
Uddhav Gautam

Grande explication à partir du lien: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx

Regardons d'abord MVC

L'entrée est d'abord dirigée vers le contrôleur, pas vers la vue. Cette entrée peut provenir d'un utilisateur interagissant avec une page, mais peut-être aussi simplement en entrant une URL spécifique dans un navigateur. Dans les deux cas, c'est un contrôleur qui est interfacé avec pour lancer certaines fonctionnalités.

Il existe une relation plusieurs-à-un entre le contrôleur et la vue. En effet, un seul contrôleur peut sélectionner différentes vues à restituer en fonction de l’opération en cours d’exécution.

Il y a une flèche à sens unique du contrôleur à la vue. En effet, la vue n’a aucune connaissance ni référence du contrôleur.

Le contrôleur retransmet le modèle. Il y a donc des informations entre la vue et le modèle attendu, mais pas le contrôleur qui le sert.

MVP - Présentateur de vue modèle

Voyons maintenant le modèle MVP. Cela ressemble beaucoup à MVC, à part quelques distinctions clés:

La saisie commence par la vue, pas par le présentateur.

Il existe un mappage univoque entre la vue et le présentateur associé.

La vue contient une référence à l'animateur. Le présentateur réagit également aux événements déclenchés à partir de la vue. Il est donc informé de la vue à laquelle il est associé.

Le présentateur met à jour la vue en fonction des actions demandées qu'il effectue sur le modèle, mais la vue n'est pas compatible avec le modèle.

MVVM - Vue Modèle Vue Modèle

Donc, avec les modèles MVC et MVP devant nous, examinons le modèle MVVM et voyons quelles sont les différences qu’il contient:

La saisie commence par la vue, pas le modèle de vue.

Bien que la vue contienne une référence au modèle de vue, le modèle de vue ne contient aucune information sur la vue. C'est pourquoi il est possible d'avoir un mappage un-à-plusieurs entre différentes vues et un modèle de vue… même entre les technologies. Par exemple, une vue WPF et une vue Silverlight peuvent partager le même modèle de vue.

32
taha027

L'image ci-dessous est tirée du article écrit par Erwin van der Valk:

image explaining MVC, MVP and MVVM - by Erwin Vandervalk

Le article explique les différences et donne des exemples de code en C #

2
Jboy Flaga