J'ai une assez bonne idée du fonctionnement de chacun de ces modèles et de certaines de leurs différences mineures, mais sont-ils vraiment si différents les uns des autres?
Il me semble que Presenter, Presentation Model, ViewModel et Controller sont essentiellement le même concept.
Pourquoi ne pourrais-je pas classer tous ces concepts en tant que contrôleurs? Je pense que cela pourrait simplifier l’idée dans son ensemble.
Quelqu'un peut-il donner une description claire de leurs différences?
Je tiens à préciser que je comprends le fonctionnement des modèles et que je les ai mis en œuvre dans une technologie ou une autre. Ce que je recherche vraiment, c’est l’expérience de l’un de ces modèles et la raison pour laquelle ils ne considéreraient pas leur ViewModel comme un contrôleur, par exemple.
Je vais vous donner quelques points de réputation, mais je cherche une très bonne réponse.
Outre les grandes lectures déjà mentionnées (Fowler & Miller) et pour répondre à votre point de vue sur les différences entre contrôleur/présentateur/... du point de vue du développeur :
Contrôleur dans MVC :
Le contrôleur est le composant réel appelé à la suite d'une interaction de l'utilisateur. (Le développeur n'a pas besoin d'écrire de code pour déléguer des appels au contrôleur.)
Le contrôleur obtient les valeurs actuelles d’une manière ou d’une autre de la vue/du contexte/du sac/quoi que ce soit, mais vous ne diriez pas vraiment que cela interagit avec la vue.
Présentateur dans MVP :
Presenter a des méthodes appelées par la vue, qui est le composant qui reçoit le contrôle lors de l’interaction de l’utilisateur. (Le développeur doit écrire du code dans la vue pour pouvoir appeler le présentateur.)
Presenter obtient les valeurs actuelles de la vue ou les reçoit de la vue à l'appel. Presenter appelle des méthodes sur la vue afin de définir son état (le peupler dit Josh Smith). Une méthode View appelée par le présentateur peut-être a plusieurs petits paramètres définis dans son corps.
Presenter n'indique pas explicitement la notion de workflow d'application. On pense généralement que cela revient à rendre le contrôle à la vue appelante.
PresentationModel in PM :
PresentationModel a des méthodes appelées par View, qui est le composant qui reçoit le contrôle lors de l’interaction de l’utilisateur. (Le développeur doit écrire du code dans la vue pour appeler PresentationModel.)
PresentationModel a une communication beaucoup plus bavarde avec View par rapport à un présentateur. Il contient également plus de logique afin de déterminer la valeur de tous les paramètres à appliquer dans la vue et de les définir dans la vue. (Ces méthodes View n'ont presque pas de logique à leur tour.)
PresentationModel n'indique pas explicitement la notion de workflow d'application. On pense généralement que cela revient à rendre le contrôle à la vue appelante.
ViewModel dans MVVM :
ViewModel a des méthodes appelées (& propriétés définies) par la vue, qui est le composant réel qui reçoit le contrôle lors de l'interaction de l'utilisateur. (Le développeur doit écrire du code (déclaratif) dans la vue pour appeler le ViewModel.)
ViewModel n’a pas de communication explicitement bavarde avec View par rapport à PresentationModel (c’est-à-dire qu’il n’appelle pas View beaucoup, le framework le fait). Mais il a beaucoup de propriétés qui mappent 1 à 1 avec les paramètres d'affichage. Il contient toujours la même logique pour déterminer la valeur de tous ces paramètres.
ViewModel ne montre pas explicitement une notion de workflow d'application. On pense généralement que cela revient à rendre le contrôle à la vue appelante.
Copier en quelque sorte ce que dit Josh Smith ( http://msdn.Microsoft.com/en-us/magazine/dd419663.aspx ): Le modèle MVVM est un cas particulier de PM qui tire parti de un framework (comme WPF/SL) pour écrire moins de code.
Martin Fowler a une page sur les modèles de conception d'interface utilisateur, dans laquelle il définit puis parle de MVC, de MVP et d'autres modèles.
http://martinfowler.com/eaaDev/uiArchs.html
A Controller est actif dans le contrôle de l'interface utilisateur. Par exemple, il gère tous les événements déclenchés par l'interface utilisateur et les gère correctement.
A Presenter est en revanche plus passif et affiche simplement des données via l'interface utilisateur, qui gère ses propres événements, etc., ou les délègue via le présentateur à un service ou à une commande.
A ViewModel est un exemple spécifique de Presenter, conçu pour être utilisé avec la liaison WPF/Silverlight.
A Presentation Model est un modèle qui peut être présenté directement par la vue. Par exemple, si vos modèles implémentent INotifyPropertyChanged pour la liaison de données, il s'agirait de modèles de présentation.
La différence entre eux réside essentiellement dans la quantité de code présente dans la vue. Le choix entre eux est en fait un choix de technologie d'application telle que WFP, WinForms, ASP MVC (2). L'idée de base de séparer la logique de la présentation est la même.
Ici est un très bon article sur les trois.
MODIFIER:
Un plusieurs articles - comparaison.
Au moins dans .Net, MVP est utilisé comme modèle de conception. Cela est généralement utilisé avec les applications Windows Forms ou ASP.Net classique. Avec MVC et MVVC, ceux-ci sont généralement utilisés avec ASP MVC, qui utilise une architecture assez différente de celle d'ASP.Net normale.
À mon avis, il n'y a pas de réelle différence conceptuelle entre MVP, MVVC, MVC et Presentation Model. Il existe quelques différences détaillées, mais à la fin, tout peut continuer à être considéré comme une configuration de contrôleur de vue modèle. La dénomination supplémentaire ne fait que créer de la confusion et je pense qu'il serait préférable d'adopter une terminologie permettant une certaine latitude pour décrire un contrôleur.
Une différence importante entre MVP et MVVM réside dans le fait que la vue ne joue pas un rôle actif dans la mise à jour de la couche intermédiaire et constitue un acteur "stupide", car la vue devrait être pour l'affichage et non pour le comportement. recommandé pour les vues "complexes", à savoir:
réfs:
https://developer.Android.com/topic/libraries/architecture/lifecycle#lc-bp
https://Android.jlelse.eu/why-to-choose-mvvm-over-mvp-Android-architecture-33c0f2de5516