design patterns - Que sont MVP et MVC et quelle est la différence?

Translate

En regardant au-delà duRAD(glisser-déposer et configurer) une manière de créer des interfaces utilisateur que de nombreux outils vous encouragent à rencontrer trois modèles de conception appelésModèle Vue Contrôleur, Model-View-PresenteretModèle-Vue-VueModèle. Ma question comporte trois parties:

  1. Quels problèmes ces schémas abordent-ils?
  2. En quoi sont-ils similaires?
  3. Comment sont-ils différents?
This question and all comments follow the "Attribution Required."

Toutes les réponses

Translate

Model-View-Presenter

DansMVP, le présentateur contient la logique métier de l'interface utilisateur pour la vue. Toutes les invocations du délégué View directement à Presenter. Le présentateur est également découplé directement de la vue et lui parle via une interface. Cela permet de se moquer de la vue dans un test unitaire. Un attribut commun de MVP est qu'il doit y avoir beaucoup de répartition bidirectionnelle. Par exemple, lorsque quelqu'un clique sur le bouton «Enregistrer», le gestionnaire d'événements délègue à la méthode «OnSave» du présentateur. Une fois l'enregistrement terminé, le présentateur rappellera ensuite la vue via son interface afin que la vue puisse afficher que l'enregistrement est terminé.

MVP a tendance à être un modèle très naturel pour obtenir une présentation séparée dans les formulaires Web. La raison en est que la vue est toujours créée en premier par le runtime ASP.NET. Vous pouvezen savoir plus sur les deux variantes.

Deux variantes principales

Vue passive:La vue est aussi stupide que possible et contient presque zéro logique. Le présentateur est un intermédiaire qui parle à la vue et au modèle. La vue et le modèle sont complètement protégés l'un de l'autre. Le modèle peut déclencher des événements, mais le présentateur s'y abonne pour mettre à jour la vue. Dans la vue passive, il n'y a pas de liaison de données directe, à la place, la vue expose les propriétés du setter que le présentateur utilise pour définir les données. Tous les états sont gérés dans le présentateur et non dans la vue.

  • Pro: surface de testabilité maximale; séparation nette de la vue et du modèle
  • Inconvénient: plus de travail (par exemple toutes les propriétés du setter) car vous faites vous-même toutes les liaisons de données.

Contrôleur superviseur:Le présentateur gère les gestes de l'utilisateur. La vue se lie au modèle directement via la liaison de données. Dans ce cas, c'est le travail du présentateur de transmettre le modèle à la vue afin qu'il puisse s'y lier. Le présentateur contiendra également une logique pour les gestes comme appuyer sur un bouton, la navigation, etc.

  • Pro: en tirant parti de la liaison de données, la quantité de code est réduite.
  • Inconvénient: il y a moins de surface testable (en raison de la liaison de données) et il y a moins d'encapsulation dans la vue car elle parle directement au modèle.

Modèle Vue Contrôleur

dans leMVC, le contrôleur est responsable de la détermination de la vue à afficher en réponse à toute action, y compris lors du chargement de l'application. Cela diffère du MVP où les actions sont acheminées via la vue vers le présentateur. Dans MVC, chaque action de la vue est en corrélation avec un appel à un contrôleur avec une action. Dans le Web, chaque action implique un appel à une URL de l'autre côté de laquelle se trouve un contrôleur qui répond. Une fois que ce contrôleur a terminé son traitement, il renvoie la vue correcte. La séquence se poursuit de cette manière tout au long de la vie de l'application:

    Action in the View
        -> Call to Controller
        -> Controller Logic
        -> Controller returns the View.

Une autre grande différence à propos de MVC est que la vue ne se lie pas directement au modèle. La vue est simplement restituée et est complètement sans état. Dans les implémentations de MVC, la vue n'aura généralement aucune logique dans le code. Ceci est contraire à MVP où c'est absolument nécessaire car, si la vue ne délègue pas au présentateur, elle ne sera jamais appelée.

Modèle de présentation

Un autre modèle à examiner est leModèle de présentationmodèle. Dans ce modèle, il n'y a pas de présentateur. Au lieu de cela, la vue se lie directement à un modèle de présentation. Le modèle de présentation est un modèle spécialement conçu pour la vue. Cela signifie que ce modèle peut exposer des propriétés que l'on ne mettrait jamais sur un modèle de domaine car ce serait une violation de la séparation des préoccupations. Dans ce cas, le modèle de présentation se lie au modèle de domaine et peut s'abonner à des événements provenant de ce modèle. La vue s'abonne ensuite aux événements provenant du modèle de présentation et se met à jour en conséquence. Le modèle de présentation peut exposer des commandes que la vue utilise pour appeler des actions. L'avantage de cette approche est que vous pouvez essentiellement supprimer complètement le code-behind car le PM encapsule complètement tout le comportement de la vue. Ce modèle est un candidat très fort pour une utilisation dans les applications WPF et est également appeléModèle-Vue-VueModèle.

Il y a unArticle MSDN sur le modèle de présentationet une section dans leGuide d'application composite pour WPF(ancien Prism) à propos deModèles de présentation séparés

La source
Translate

C'est une simplification excessive des nombreuses variantes de ces modèles de conception, mais c'est ainsi que j'aime penser aux différences entre les deux.

MVC

MVC

MVP

enter image description here

La source
Translate

J'ai blogué à ce sujet il y a quelque temps, citantL'excellent article de Todd Snyder sur la différence entre les deux:

Voici les principales différences entre les modèles:

Modèle MVP

  • La vue est plus faiblement couplée au modèle. Le présentateur est responsable de la liaison du modèle à la vue.
  • Test unitaire plus facile car l'interaction avec la vue se fait via une interface
  • Habituellement, afficher la carte du présentateur un à un Les vues complexes peuvent avoir plusieurs présentateurs.

Modèle MVC

  • Les contrôleurs sont basés sur des comportements et peuvent être partagés entre les vues
  • Peut être responsable de la détermination de la vue à afficher

C'est la meilleure explication que j'ai pu trouver sur le Web.

La source
Translate

Voici des illustrations qui représentent le flux de communication

enter image description here

enter image description here

La source
Translate

MVP estne pasforcément un scénario où la vue est en charge (voir MVP de Taligent par exemple).
Je trouve malheureux que les gens prêchent toujours cela comme un modèle (Vue en charge) par opposition à un anti-modèle car il contredit "C'est juste une vue" (Programmeur pragmatique). "C'est juste une vue" indique que la vue finale présentée à l'utilisateur est une préoccupation secondaire de l'application. Le modèle MVP de Microsoft rend la réutilisation des vues beaucoup plus difficile etcommodémentexcuse le concepteur de Microsoft d'encourager les mauvaises pratiques.

Pour être parfaitement franc, je pense que les préoccupations sous-jacentes de MVC sont valables pour toute implémentation MVP et les différences sont presque entièrement sémantiques. Tant que vous suivez la séparation des préoccupations entre la vue (qui affiche les données), le contrôleur (qui initialise et contrôle l'interaction de l'utilisateur) et le modèle (les données et / ou services sous-jacents)), vous bénéficiez des avantages de MVC. . Si vous obtenez les avantages, qui se soucie vraiment de savoir si votre modèle est MVC, MVP ou Supervising Controller? Le seulréelle modèle reste comme MVC, les autres n'en sont que des saveurs différentes.

Considérercearticle très passionnant qui répertorie de manière exhaustive un certain nombre de ces différentes implémentations. Vous remarquerez peut-être qu'ils font tous fondamentalement la même chose mais un peu différemment.

Personnellement, je pense que MVP n'a été réintroduit que récemment en tant que terme accrocheur pour soit réduire les arguments entre bigots sémantiques qui se disputent si quelque chose est vraiment MVC ou non, soit pour justifier les outils de développement rapide d'applications de Microsofts. Aucune de ces raisons dans mes livres ne justifie son existence en tant que modèle de conception distinct.

La source
Translate

MVP: la vue est en charge.

La vue, dans la plupart des cas, crée son présentateur. Le présentateur interagira avec le modèle et manipulera la vue via une interface. La vue interagira parfois avec le présentateur, généralement via une interface. Cela revient à la mise en œuvre; voulez-vous que la vue appelle des méthodes sur le présentateur ou voulez-vous que la vue contienne des événements que le présentateur écoute? Cela se résume à ceci: la vue connaît le présentateur. La vue est déléguée au présentateur.

MVC: le contrôleur est en charge.

Le contrôleur est créé ou accédé en fonction d'un événement / d'une demande. Le contrôleur crée ensuite la vue appropriée et interagit avec le modèle pour configurer davantage la vue. Cela se résume à: le contrôleur crée et gère la vue; la vue est esclave du contrôleur. La vue ne connaît pas le contrôleur.

La source
AVI
Translate

enter image description here

MVC (contrôleur de vue modèle)

L'entrée est dirigée d'abord vers le contrôleur, pas vers la vue. Cette entrée peut provenir d'un utilisateur interagissant avec une page, mais cela 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 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. Notez la flèche à sens unique du contrôleur à la vue. Cela est dû au fait que la vue n'a aucune connaissance ou référence au contrôleur. Le contrôleur renvoie le modèle, il y a donc une connaissance entre la vue et le modèle attendu qui y est passé, mais pas le contrôleur qui le sert.

MVP (Model View Presenter)

L'entrée commence par la vue, pas par 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 à 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 ne reconnaît pas le modèle.

Pour plusRéférence

La source
Translate

Il y a de nombreuses réponses à la question, mais j'ai senti qu'il fallait une réponse vraiment simple comparant clairement les deux. Voici la discussion que j'ai créée lorsqu'un utilisateur recherche un nom de film dans une application MVP et MVC:

Utilisateur: cliquez sur cliquez sur…

Vue: Qui c'est? [MVP|MVC]

Utilisateur: Je viens de cliquer sur le bouton de recherche…

Vue: Ok, attendez une seconde…. [MVP|MVC]

( Vueappeler lePrésentateur|Manette…) [MVP|MVC]

Vue: HeyPrésentateur|Manette, un utilisateur vient de cliquer sur le bouton de recherche, que dois-je faire? [MVP|MVC]

Présentateur|Manette: HeyVue, y a-t-il un terme de recherche sur cette page? [MVP|MVC]

Vue: Oui,… le voici… «piano» [MVP|MVC]

Présentateur: MerciVue,… Pendant ce temps, je recherche le terme de recherche sur leModèle, veuillez lui montrer une barre de progression [MVP|MVC]

( Présentateur|Manetteappelle leModèle…) [MVP|MVC]

Présentateur|Manette: HeyModèle, Avez-vous des résultats pour ce terme de recherche?: «Piano» [MVP|MVC]

Modèle: HeyPrésentateur|Manette, laisse moi vérifier … [MVP|MVC]

( Modèleeffectue une requête dans la base de données des films…) [MVP|MVC]

( Après un moment ... )

-------------- C'est là que MVP et MVC commencent à diverger ---------------

Modèle: J'ai trouvé une liste pour vous,Présentateur, le voici en JSON "[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993}]" [MVP]

Modèle: Il y a un résultat disponible,Manette. J'ai créé une variable de champ dans mon instance et l'ai remplie avec le résultat. Son nom est "searchResultsList" [MVC]

(Présentateur|ManetteMerciModèleet revient auVue) [MVP|MVC]

Présentateur: Merci pour votre patienceVue, J'ai trouvé une liste de résultats correspondants pour vous et je les ai arrangés dans un format présentable: ["Piano Teacher 2001", "Piano 1993"]. Veuillez le montrer à l'utilisateur dans une liste verticale. Veuillez également masquer la barre de progression maintenant [MVP]

Manette: Merci pour votre patienceVue, J'ai demandéModèleà propos de votre requête de recherche. Il dit qu'il a trouvé une liste de résultats correspondants et les a stockés dans une variable nommée "searchResultsList" à l'intérieur de son instance. Vous pouvez l'obtenir à partir de là. Veuillez également masquer la barre de progression maintenant [MVC]

Vue: Merci beaucoupPrésentateur [MVP]

Vue: Merci "Controller" [MVC] (Maintenant leVuese questionne: comment présenter les résultats que j'obtiensModèleà l'utilisateur? L'année de production du film doit-elle venir en premier ou en dernier ...? Doit-il figurer dans une liste verticale ou horizontale? ...)

Au cas où cela vous intéresserait, j'ai écrit une série d'articles traitant des modèles d'architecture d'application (MVC, MVP, MVVP, architecture propre, ...) accompagnés d'un repo Githubici. Même si l'exemple est écrit pour Android, les principes sous-jacents peuvent être appliqués à n'importe quel support.

La source
Translate
  • MVP = Model-View-Presenter
  • MVC = Model-View-Controller

    1. Les deux modèles de présentation. Ils séparent les dépendances entre un modèle (pensez aux objets de domaine), votre écran / page Web (la vue) et la façon dont votre interface utilisateur est censée se comporter (présentateur / contrôleur)
    2. Leur concept est assez similaire, les gens initialisent le présentateur / contrôleur différemment selon les goûts.
    3. Un excellent article sur les différences estici. Le plus notable est que le modèle MVC a le modèle mettant à jour la vue.
La source
Translate

Il convient également de rappeler qu'il existe également différents types de MVP. Fowler a divisé le modèle en deux: vue passive et contrôleur de supervision.

Lorsque vous utilisez la vue passive, votre vue implémente généralement une interface fine avec des propriétés mappant plus ou moins directement sur le widget de l'interface utilisateur sous-jacente. Par exemple, vous pouvez avoir un ICustomerView avec des propriétés telles que le nom et l'adresse.

Votre implémentation pourrait ressembler à ceci:

public class CustomerView : ICustomerView
{
    public string Name
    { 
        get { return txtName.Text; }
        set { txtName.Text = value; }
    }
}

Votre classe Presenter parlera au modèle et le «mappera» à la vue. Cette approche est appelée la «vue passive». L'avantage est que la vue est facile à tester et qu'il est plus facile de se déplacer entre les plates-formes d'interface utilisateur (Web, Windows / XAML, etc.). L'inconvénient est que vous ne pouvez pas tirer parti de choses comme la liaison de données (qui estvraimentpuissant dans des cadres commeWPFetSilverlight).

La deuxième saveur de MVP est le contrôleur superviseur. Dans ce cas, votre vue peut avoir une propriété appelée Client, qui est à nouveau liée aux données des widgets de l'interface utilisateur. Vous n'avez pas à penser à synchroniser et à micro-gérer la vue, et le contrôleur de supervision peut intervenir et vous aider en cas de besoin, par exemple avec une logique d'interaction conforme.

La troisième «saveur» de MVP (ou quelqu'un l'appellerait peut-être un modèle distinct) est le modèle de présentation (ou parfois appelé Model-View-ViewModel). Par rapport au MVP, vous «fusionnez» le M et le P en une seule classe. Vous avez votre objet client auquel vos widgets d'interface utilisateur sont liés par des données, mais vous avez également des champs supplémentaires spécifiques à l'interface utilisateur tels que "IsButtonEnabled" ou "IsReadOnly", etc.

Je pense que la meilleure ressource que j'ai trouvée pour l'architecture de l'interface utilisateur est la série d'articles de blog rédigés par Jeremy Miller surTable des matières de la série Build Your Own CAB. Il a couvert toutes les saveurs de MVP et a montré du code C # pour les implémenter.

J'ai également blogué sur le modèle Model-View-ViewModel dans le contexte de Silverlight à l'adresseYouCard revisité: implémentation du modèle ViewModel.

La source
Translate

Modèle Vue Contrôleur

MVCest un modèle pour l'architecture d'une application logicielle. Il sépare la logique de l'application en trois parties distinctes, favorisant la modularité et la facilité de collaboration et de réutilisation. Il rend également les applications plus flexibles et plus accueillantes pour les itérations.

  • Des modèlespour la gestion des données et de la logique métier
  • Contrôleurspour gérer l'interface utilisateur et l'application
  • Vuespour la gestion des objets d'interface utilisateur graphique et la présentation

Pour rendre cela un peu plus clair, imaginons une simple application de liste de courses. Tout ce que nous voulons, c'est une liste du nom, de la quantité et du prix de chaque article que nous devons acheter cette semaine. Ci-dessous, nous décrirons comment nous pourrions implémenter certaines de ces fonctionnalités à l'aide de MVC.

enter image description here

Model-View-Presenter

  • lemodèlesont les données qui seront affichées dans la vue (interface utilisateur).
  • levueest une interface qui affiche les données (le modèle) et achemine les commandes utilisateur (événements) vers le présentateur pour agir sur ces données. La vue fait généralement référence à son présentateur.
  • lePrésentateurest l '«intermédiaire» (joué par le contrôleur dans MVC) et a des références à la fois à la vue et au modèle.Veuillez noter que le mot «modèle»est trompeur. Cela devrait plutôt êtrelogique métier qui récupère ou manipule un modèle. Par exemple: si vous avez une base de données stockant l'utilisateur dans une table de base de données et que votre vue souhaite afficher une liste d'utilisateurs, le présentateur aura une référence à la logique métier de votre base de données (comme un DAO) à partir de laquelle le présentateur interrogera une liste des utilisateurs.

Si vous souhaitez voir un exemple avec une implémentation simple, veuillez vérifierceMessage GitHub

Un flux de travail concret d'interrogation et d'affichage d'une liste d'utilisateurs à partir d'une base de données pourrait fonctionner comme ceci:enter image description here

Quel est ledifférenceentreMVCetMVPmotifs?

Modèle MVC

  • Les contrôleurs sont basés sur des comportements et peuvent être partagés entre les vues

  • Peut être responsable de la détermination de la vue à afficher (modèle de contrôleur avant)

Modèle MVP

  • La vue est plus faiblement couplée au modèle. Le présentateur est responsable de la liaison du modèle à la vue.

  • Test unitaire plus facile car l'interaction avec la vue se fait via une interface

  • Habituellement, afficher la carte du présentateur un à un Les vues complexes peuvent avoir plusieurs présentateurs.

La source
Translate

Ils abordent chacun des problèmes différents et peuvent même être combinés pour avoir quelque chose comme ci-dessous

The Combined Pattern

Il y a aussiune comparaison complète de MVC, MVP et MVVM ici

La source
Translate

Ces deux cadres visent à séparer les préoccupations - par exemple, l'interaction avec une source de données (modèle), la logique d'application (ou la transformation de ces données en informations utiles) (contrôleur / présentateur) et le code d'affichage (vue). Dans certains cas, le modèle peut également être utilisé pour transformer une source de données en une abstraction de niveau supérieur. Un bon exemple de ceci est leProjet MVC Storefront.

Il y a une discussioniciconcernant les différences entre MVC et MVP.

La distinction faite est que dans une application MVC, la vue et le contrôleur interagissent traditionnellement avec le modèle, mais pas entre eux.

Les conceptions MVP permettent au présentateur d'accéder au modèle et d'interagir avec la vue.

Cela dit, ASP.NET MVC est par ces définitions un framework MVP car le contrôleur accède au modèle pour remplir la vue qui est censée n'avoir aucune logique (affiche simplement les variables fournies par le contrôleur).

Pour peut-être avoir une idée de la distinction entre ASP.NET MVC et MVP, consultezcette présentation MIXpar Scott Hanselman.

La source
Translate

Les deux sont des modèles essayant de séparer la présentation et la logique métier, découplant la logique métier des aspects de l'interface utilisateur

Sur le plan architectural, MVP est une approche basée sur le contrôleur de page où MVC est une approche basée sur le contrôleur frontal. Cela signifie que dans MVP, le cycle de vie des pages de formulaire Web standard est simplement amélioré en extrayant la logique métier du code derrière. En d'autres termes, la page est la seule requête http de service. En d'autres termes, MVP IMHO est un type d'amélioration évolutive de formulaire Web. MVC change complètement le jeu car la demande est interceptée par la classe du contrôleur avant le chargement de la page, la logique métier est exécutée là-bas, puis au résultat final du traitement par le contrôleur des données qui viennent d'être vidées sur la page ("vue") sens, MVC ressemble (au moins à moi) beaucoup à la saveur Supervising Controller de MVP amélioré avec le moteur de routage

Les deux activent le TDD et présentent des inconvénients et des avantages.

La décision sur la façon de choisir l'un d'eux IMHO devrait être basée sur le temps investi dans le type de formulaire Web ASP NET de développement Web. Si l'on se considère bon dans les formulaires Web, je suggérerais MVP. Si l'on ne se sentait pas aussi à l'aise dans des choses telles que le cycle de vie des pages, etc. MVC pourrait être un moyen d'aller ici.

Voici encore un autre lien d'article de blog donnant un peu plus de détails sur ce sujet

http://blog.vuscode.com/malovicn/archive/2007/12/18/model-view-presenter-mvp-vs-model-view-controller-mvc.aspx

La source
Translate

J'ai utilisé à la fois MVP et MVC et bien que nous, en tant que développeurs, ayons tendance à nous concentrer sur les différences techniques des deux modèles, le point pour MVP à IMHO est beaucoup plus lié à la facilité d'adoption qu'autre chose.

Si je travaille dans une équipe qui possède déjà une bonne expérience du style de développement de formulaires Web, il est beaucoup plus facile d'introduire MVP que MVC. Je dirais que MVP dans ce scénario est une victoire rapide.

Mon expérience me dit que déplacer une équipe de formulaires Web vers MVP, puis de MVP vers MVC est relativement facile; passer des formulaires Web à MVC est plus difficile.

Je laisse ici un lien vers une série d'articles qu'un de mes amis a publiés sur MVP et MVC.

http://www.qsoft.be/post/Building-the-MVP-StoreFront-Gutthrie-style.aspx

La source
Translate

Dans MVP, la vue tire les données du présentateur qui dessine et prépare / normalise les données du modèle, tandis que dans MVC, le contrôleur tire les données du modèle et de l'ensemble, par poussée dans la vue.

Dans MVP, vous pouvez avoir une seule vue fonctionnant avec plusieurs types de présentateurs et un seul présentateur travaillant avec différentes vues multiples.

MVP utilise généralement une sorte de cadre de liaison, tel que le cadre de liaison Microsoft WPF ou divers cadres de liaison pour HTML5 et Java.

Dans ces frameworks, l'interface utilisateur / HTML5 / XAML sait quelle propriété du présentateur chaque élément de l'interface utilisateur affiche, donc lorsque vous liez une vue à un présentateur, la vue recherche les propriétés et sait comment en tirer des données et comment pour les définir lorsqu'une valeur est modifiée dans l'interface utilisateur par l'utilisateur.

Ainsi, si, par exemple, le modèle est une voiture, alors le présentateur est une sorte de présentateur de voiture, expose les propriétés de la voiture (année, fabricant, sièges, etc.) à la vue. La vue sait que le champ de texte appelé «constructeur automobile» doit afficher la propriété Créateur de présentateur.

Vous pouvez ensuite lier à la vue de nombreux types de présentateurs, tous doivent avoir la propriété Maker - cela peut être un avion, un train ou quoi que ce soit, la vue ne se soucie pas. La vue tire des données du présentateur - peu importe laquelle - tant qu'elle implémente une interface convenue.

Ce cadre de liaison, si vous le supprimez, c'est en fait le contrôleur :-)

Et ainsi, vous pouvez considérer MVP comme une évolution de MVC.

MVC est génial, mais le problème est que généralement son contrôleur par vue. Le contrôleur A sait comment définir les champs de la vue A. Si maintenant, vous voulez que la vue A affiche les données du modèle B, vous avez besoin du contrôleur A pour connaître le modèle B, ou vous avez besoin du contrôleur A pour recevoir un objet avec une interface - ce qui est comme MVP uniquement sans les liaisons, ou vous devez réécrire le code de jeu d'interface utilisateur dans le contrôleur B.

Conclusion - MVP et MVC sont tous deux un découplage des modèles d'interface utilisateur, mais MVP utilise généralement un cadre de liaisons qui est MVC en dessous. THUS MVP est à un niveau architectural plus élevé que MVC et un modèle d'encapsulation au-dessus de MVC.

La source
Translate

Mon humble vue courte: MVP est pour les grandes échelles et MVC pour les petites échelles. Avec MVC, j'ai parfois le sentiment que le V et le C peuvent être vus comme les deux côtés d'un seul composant indivisible plutôt directement lié à M, et on tombe inévitablement vers des échelles plus courtes, comme les commandes de l'interface utilisateur et les widgets de base. À ce niveau de granularité, MVP n'a guère de sens. Quand on passe au contraire à des échelles plus grandes, une interface appropriée devient plus importante, de même avec une attribution sans ambiguïté des responsabilités, et voici MVP.

En revanche, cette règle de mise à l'échelle du pouce, peut peser très peu lorsque les caractéristiques de la plate-forme favorisent une sorte de relations entre les composants, comme avec le Web, où il semble plus facile de mettre en œuvre MVC, plus que MVP.

La source
Translate

Il existe de nombreuses versions de MVC, cette réponse concerne le MVC original de Smalltalk. En bref, c'estimage of mvc vs mvp

Ce discoursdroidcon NYC 2017 - Conception d'application épurée avec des composants d'architecturele clarifie

enter image description here enter image description here

La source
Translate

Il y acebelle vidéo d'oncle Bob où il explique brièvement MVC & MVP à la fin.

IMO, MVP est une version améliorée de MVC où vous séparez fondamentalement le souci de ce que vous allez montrer (les données) de la façon dont vous allez montrer (la vue). Presenter inclut en quelque sorte la logique métier de votre interface utilisateur, impose implicitement les données à présenter et vous donne une liste de modèles de vue stupides. Et quand vient le temps d'afficher les données, il vous suffit de brancher votre vue (comprend probablement les mêmes identifiants) dans votre adaptateur et de définir les champs de vue appropriés en utilisant ces modèles de vue avec un minimum de code introduit (en utilisant simplement des setters). Son principal avantage est que vous pouvez tester la logique métier de votre interface utilisateur sur de nombreuses / diverses vues, telles que l'affichage des éléments dans une liste horizontale ou une liste verticale.

Dans MVC, nous parlons à travers des interfaces (frontières) pour coller différentes couches. Le contrôleur est un plug-in de notre architecture mais il n'a pas une telle restriction pour imposer ce qu'il faut montrer. En ce sens, MVP est une sorte de MVC avec un concept de vues pouvant être connecté au contrôleur via des adaptateurs.

J'espère que cela aidera mieux.

La source
Translate

La réponse la plus simple est la manière dont la vue interagit avec le modèle. Dans MVP, la vue est liée au présentateur, qui agit comme intermédiaire entre la vue et le modèle, prenant les entrées de la vue, obtenant les données du modèle, puis exécutant une logique métier et enfin mettant à jour la vue. Dans MVC, le modèle met à jour la vue directement plutôt que de revenir en arrière via le contrôleur.

La source
Translate

Je pense que cette image d'Erwin Vandervalk (et l'accompagnementarticle) est la meilleure explication de MVC, MVP et MVVM, leurs similitudes et leurs différences. learticlen'apparaît pas dans les résultats des moteurs de recherche pour les requêtes sur «MVC, MVP et MVVM» car le titre de l'article ne contient pas les mots «MVC» et «MVP»; mais c'est la meilleure explication, je pense.

image explaining MVC, MVP and MVVM - by Erwin Vandervalk

(Learticlecorrespond également à ce que l'oncle Bob Martin a dit dans l'un de ses discours: que MVC a été conçu à l'origine pour les petits composants de l'interface utilisateur, pas pour l'architecture du système)

La source
Translate
  • Dans MVC, View a la partie UI, le contrôleur est le médiateur entre la vue et le modèle et le modèle contient la logique métier.
  • Dans MVP, View contient à la fois l'interface utilisateur et l'implémentation du présentateur car ici le présentateur est juste une interface et le modèle est le même, c'est-à-dire contient une logique métier.
La source
Translate

MVP

MVP signifie Model - View-Presenter. Cela s'est concrétisé au début de 2007, lorsque Microsoft a introduit les applications Windows Smart Client.

Le présentateur joue le rôle de superviseur dans MVP qui lie les événements d'affichage et les logiques métier à partir des modèles.

La liaison d'événement de vue sera implémentée dans Presenter à partir d'une interface de vue.

View est l'initiateur des entrées utilisateur, puis délègue les événements au présentateur et le présentateur gère les liaisons d'événements et récupère les données des modèles.

Avantages:La vue n'a qu'une interface utilisateur, pas de logique.Niveau élevé de testabilité

Les inconvénients:Un peu complexe et plus de travail lors de la mise en œuvre de liaisons d'événements

MVC

MVC signifie Model-View-Controller. Le contrôleur est responsable de la création de modèles et du rendu des vues avec des modèles de liaison.

Le contrôleur est l'initiateur et décide de la vue à rendre.

Avantages:Accent mis sur le principe de responsabilité unique Niveau élevé de testabilité

Les inconvénients:Parfois trop de charge de travail pour les contrôleurs, si vous essayez de rendre plusieurs vues dans le même contrôleur.

La source