J'ai lu pendant trois jours sur les modèles Model-View-Controller (MVC) et Model-View-Presenter (MVP) . Et il y a une question qui me dérange beaucoup. Pourquoi les concepteurs de logiciels ont-ils inventé MVP, alors qu'il y avait déjà un MVC?
Quels problèmes ont-ils rencontrés, que MVC n'a pas résolus (ou mal résolus), mais que MVP peut résoudre? Quels problèmes MVP est-il censé résoudre?
J'ai lu de nombreux articles sur l'historique et l'explication de MVP, ou sur les différences entre MVC et MVP, mais aucun d'entre eux n'avait de réponse claire à mes questions.
Dans l'un des articles que j'ai lus, il était dit:
Passons maintenant à Model View Presenter, qui répondait aux insuffisances du motif MVC appliqué aux interfaces utilisateur graphiques modernes à base de composants. Dans les systèmes d'interface graphique modernes, les composants d'interface graphique traitent eux-mêmes les entrées de l'utilisateur, telles que les mouvements de la souris et les clics, plutôt que celles d'un contrôleur central.
Donc, je ne peux pas comprendre, mais peut-il en réalité être autrement, de telle sorte que les composants de l'interface graphique ne gèrent pas les entrées de l'utilisateur par eux-mêmes? Et que veut dire exactement "manipuler par eux-mêmes"?
la source
Réponses:
MVC est conceptuellement élégant:
Cependant: Le flux de données et d'événements dans MVC est circulaire. Et la vue contiendra souvent une logique importante (comme des gestionnaires d’événements pour les actions de l’utilisateur). Ensemble, ces propriétés rendent le système difficile à tester et à maintenir.
L'architecture MVP remplace le contrôleur par un présentateur, qui sert d'intermédiaire entre la vue et le modèle. Ceci linéarise le système:
Cela présente les avantages suivants:
La logique (comme les gestionnaires d'événements et l'état de l'interface utilisateur) peut être déplacée de la vue vers le présentateur.
L'interface utilisateur peut être testée par unité en termes de présentateur, car elle décrit l'état de l'interface utilisateur. Dans le test unitaire, nous remplaçons la vue par un pilote de test qui appelle le présentateur.
L'interface utilisateur étant isolée de la logique de l'application, les deux peuvent être développés indépendamment.
Mais cette approche présente également des inconvénients:
la source
Dans MVP, le présentateur remplace le contrôleur de MVC. La différence entre les deux est que le présentateur manipule directement la vue. Il est conçu pour les infrastructures d'interface utilisateur principalement événementielles (telles que Windows Forms), sans prise en charge importante de la liaison de données enrichies pouvant servir au modèle MVVM (comme WPF). Sinon, une grande partie de la logique de gestion de l'état de la vue et de la mise à jour du modèle de sauvegarde se trouverait dans la vue elle-même.
la source