Il y a de nombreuses réponses à la question, mais j'ai senti le besoin d'une réponse vraiment simple comparant clairement les deux. Voici la discussion que j'ai faite lorsqu'un utilisateur recherche un nom de film dans une application MVP et MVC:
Utilisateur: Cliquez, cliquez sur…
Voir : Qui est-ce? [ MVP | MVC ]
Utilisateur: je viens de cliquer sur le bouton de recherche…
Voir : Ok, attendez une seconde…. [ MVP | MVC ]
( Voir appeler le présentateur | Contrôleur …) [ MVP | MVC ]
Voir : Hey présentateur | Contrôleur , un Utilisateur vient de cliquer sur le bouton de recherche, que dois-je faire? [ MVP | MVC ]
Présentateur | Contrôleur : Hey View , y a-t-il un terme de recherche sur cette page? [ MVP | MVC ]
Vue : Oui,… le voici… «piano» [ MVP | MVC ]
Présentateur : Merci Voir ,… en attendant je recherche le terme de recherche sur le modèle , veuillez lui montrer une barre de progression [ MVP | MVC ]
(Le présentateur | Le contrôleur appelle le modèle …) [ MVP | MVC ]
Présentateur | Contrôleur : Hé modèle , avez-vous une correspondance pour ce terme de recherche?: “Piano” [ MVP | MVC ]
Modèle : Hey Presenter | Contrôleur , laissez-moi vérifier… [ MVP | MVC ]
(Le modèle fait une requête à la base de données de 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 , la voici en JSON "[{" name ":" Piano Teacher "," year ": 2001}, {" name ":" Piano "," year ": 1993} ] »[ MVP ]
Modèle : Il y a un résultat disponible, contrôleur . J'ai créé une variable de champ dans mon instance et l'ai remplie avec le résultat. Son nom est "searchResultsList" [ MVC ]
(Le présentateur | Le contrôleur remercie le modèle et revient à la vue ) [ MVP | MVC ]
Présentateur : Merci d'avoir attendu View , j'ai trouvé une liste de résultats correspondants pour vous et 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 ]
Contrôleur : Merci d'avoir attendu View , j'ai demandé à Model 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 ]
View : Merci beaucoup Presenter [ MVP ]
Vue : Merci "Contrôleur" [ MVC ] (Maintenant, la Vue se questionne: Comment dois-je présenter les résultats que j'obtiens du Modèle à l'utilisateur? L'année de production du film doit-elle venir en premier ou en dernier ...? Doit-elle être dans une liste verticale ou horizontale? ...)
Si vous êtes intéressé, j'ai écrit une série d'articles traitant des modèles architecturaux des applications (MVC, MVP, MVVP, architecture propre, ...) accompagné d'un dépôt Github ici . Même si l'échantillon est écrit pour Android, les principes sous-jacents peuvent être appliqués à n'importe quel support.