Si nous recherchons sur Google en utilisant la phrase "Quelle est la différence entre le modèle de conception MVC, MVP et MVVM", nous pouvons obtenir quelques URL qui discutent de la différence entre le modèle de conception MVC MVP et MVVM comme théoriquement :
MVP
Utilisez dans les 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. Comme la vue ne peut pas se lier directement au présentateur, les informations doivent être transmises à la vue via une interface (IView).
MVVM
À utiliser dans les situations où une liaison via un contexte de données est possible. Pourquoi? Les différentes interfaces IView de chaque vue sont supprimées, ce qui signifie moins de code à maintenir. Quelques exemples où MVVM est possible incluent 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 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 un cadre 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 ces 3 modèles de conception (MVC, MVP et MVVM) avec du code.
Je voudrais mettre la main sur le code source de 3 applications CRUD similaires qui ont été implémentées par ces trois modèles de conception (MVC, MVP et MVVM). Pour que je puisse parcourir le code et comprendre comment écrire du code pour ces trois modèles de conception (MVC, MVP et MVVM).
Donc, si un tel article existe qui explique comment le code serait différent pour ces 3 modèles de conception (MVC, MVP et MVVM), veuillez me rediriger vers cet article.
Réponses:
Quelques différences de base peuvent être écrites en bref:
MVC:
MVC traditionnel est là où il y a un
MVP:
Similaire au MVC traditionnel, mais Controller est remplacé par Presenter. 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 de View Model. C'est une sorte d'implémentation d'Observer Design Pattern, où les changements dans le modèle sont également représentés dans la vue par la VM. Par exemple: si un curseur est modifié, non seulement le modèle est mis à jour, mais les données qui peuvent être un texte, qui sont affichées dans la vue sont également mises à jour. Il existe donc une liaison de données bidirectionnelle.
la source
MVC, MVP, MVVM
MVC (ancien)
MVP (plus modulaire en raison de son faible couplage. Le présentateur est un médiateur entre la vue et le modèle)
MVVM (Vous avez déjà une liaison bidirectionnelle entre VM et le composant UI, il est donc plus automatisé que MVP)
Une autre image:
la source
Grande explication depuis le lien: http://geekswithblogs.net/dlussier/archive/2009/11/21/136454.aspx
Voyons d'abord MVC
L'entrée est dirigée vers le contrôleur en premier, 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é 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 à rendre en fonction de l'opération en cours d'exécution.
Il y a une flèche à sens unique du contrôleur vers la vue. En effet, la vue n'a aucune connaissance ni référence au contrôleur.
Le contrôleur transmet le modèle, il y a donc une connaissance entre la vue et le modèle attendu qui lui est transmis, mais pas le contrôleur qui le sert.
MVP - Model View Presenter
Examinons maintenant le modèle MVP. Il ressemble beaucoup à MVC, à l'exception de quelques 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 qui lui est associée.
Le présentateur met à jour la vue en fonction des actions demandées qu'il exécute sur le modèle, mais la vue n'est pas compatible avec le modèle.
MVVM - Modèle Voir le modèle
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 et non par 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 seul 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.
la source
L'image ci-dessous est extraite de l' article écrit par Erwin van der Valk:
L' article explique les différences et donne quelques exemples de code en C #
la source