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

Si nous effectuons une recherche sur Google en utilisant l'expression "Quelle est la différence entre MVC, MVP et MVVM design pattern", nous pouvons obtenir quelques URL qui discutent de la différence entre MVC MVP et MVVM design pattern théoriquement comme :

MVP

Utiliser dans des situations où la liaison via un datacontext 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. Puisque la vue ne peut pas se lier directement au presenter, les informations doivent être transmises à la vue via une interface (IView).

MVVM

Utiliser dans des situations où la liaison via un datacontext est possible. Pourquoi? Les différentes interfaces IView pour chaque vue sont supprimées, ce qui signifie moins de code à maintenir. Quelques exemples où MVVM est possible incluent des 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 vous ne pouvez pas utiliser efficacement MVVM ou MVP). Cela décrit clairement la situation où une API web est séparée des données envoyées aux navigateurs clients. Microsoft ASP.NET MVC est un excellent outil pour gérer de telles situations et fournit un framework MVC très clair


Mais je n'ai pas trouvé un seul article qui discute théoriquement de la différence avec un exemple de code.

Ce serait vraiment bien si je reçois un article qui discute de la différence entre ceux-ci 3 modèles de conception (MVC, MVP et MVVM) avec 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 et MVVM). Afin que je puisse passer par le code et comprendre comment il faut écrire du code pour ces trois modèles de conception (MVC, MVP et MVVM).

Donc, si un tel article existe qui discute de la façon dont le code serait différent pour ces 3 modèles de conception (MVC, MVP et MVVM), veuillez me rediriger vers que l'article.

153
demandé sur Richie Thomas 2013-10-18 11:55:49

4 réponses

Ce devrait être un bon point de départ. En réalité, votre "plate-forme" choisie joue également un rôle important dans la façon 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.

49
répondu David Osborne 2013-10-18 08:09:45

Quelques différences de base peuvent être écrites en bref:

MVC:

MVC traditionnel est l'endroit où il y a un

  1. modèle: Sert de modèle pour les données
  2. Afficher : Traite de la vue de l'utilisateur, qui peut être l'INTERFACE utilisateur
  3. Controller: contrôle L'interaction entre le Modèle et la vue, où view appelle le contrôleur pour mettre à jour le modèle. View peut appeler plusieurs contrôleurs si nécessaire.

MVP:

Similaire au MVC traditionnel mais Le contrôleur est remplacé par le présentateur. Mais le présentateur, contrairement au contrôleur, 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 du modèle de vue. C'est une sorte d'implémentation du modèle de conception D'Observateur, où les changements dans le modèle sont également représentés dans la vue, par la machine virtuelle. Par exemple: Si un curseur est modifié, non seulement le modèle est mis à jour mais les données qui peuvent être du texte, qui est affiché dans la vue est également mis à jour. Il y a donc une liaison de données bidirectionnelle.

74
répondu Pritam Banerjee 2017-06-02 12:17:04

Grande explication 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 elle peut également provenir de la simple saisie d'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 y a plusieurs à un relation entre le Contrôleur et la Vue. En effet, un seul contrôleur peut sélectionner différentes vues à rendre en fonction de l'opération en cours d'exécution.

Il y a une flèche de manière du contrôleur pour voir. C'est parce que la vue n'a aucune connaissance ou référence au contrôleur.

Le contrôleur renvoie le modèle, donc il y a une connaissance entre la vue et le modèle attendu qui lui est transmis, mais pas le contrôleur qui le Sert jusqu'.

MVP-modèle afficher présentateur

Maintenant, regardons le modèle MVP. Il semble très similaire à MVC, sauf pour certaines distinctions clés:

L'entrée commence par la vue, pas le présentateur.

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

La vue contient une référence au présentateur. Le présentateur réagit également aux événements déclenchés à partir de la vue, de sorte qu'il est conscient de la vue associée avec.

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 consciente du modèle.

MVVM-Modèle Vue modèle de vue

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

L'entrée commence par la vue, pas le modèle de vue.

Alors que la vue contient 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 à travers les technologies. Par exemple, une vue WPF et une vue Silverlight peuvent partager le même modèle de vue.

27
répondu taha027 2016-08-31 07:37:59

MVC, MVP, MVVM

MVC (ancien)

MVP (plus modulaire en raison de son faible couplage. Presenter est un médiateur entre la vue et le modèle)

MVVM (vous avez déjà une liaison bidirectionnelle entre la VM et le composant UI, il est donc plus automatisé que MVP) entrez la description de l'image ici

Une autre image: entrez la description de l'image ici

21
répondu Uddhav Gautam 2018-03-12 05:02:40