Le schéma MVP (Model-View-Presenter) est-il utile pour Android?

34

Comment séparer View et Presenter dans Android, tandis que les réactions sur les actions de l'utilisateur (partie Presenter de MVP) sont définies dans les mêmes activités que celles qui montrent les éléments d'interface graphique (partie View de MVP).

"Dans le présentateur de vue modèle, comme le disent Martin Fowler ou Michael Feathers [2], la logique de l'interface utilisateur est divisée en une classe appelée présentateur, qui gère toutes les entrées de l'utilisateur et qui indique à la vue" muette "quoi et quand display "(cité d' ici ).

Jusqu'à présent, je pensais que l'une des principales caractéristiques d'Android est l' activité intelligente qui prend des mesures, y réagit et affiche les résultats. Le schéma MVP est-il en contradiction avec la philosophie Android? At-il le sens d'essayer de le réaliser sur Android? Si oui, comment cela pourrait-il être fait?

Gangnus
la source
2
+1 Bonne question parce que je n'ai pas encore vu mvp / mvvm dans les sources d'applications Android. Il serait intéressant de voir des exemples de mvp android et de la surcharge de code / lib qu'ils génèrent. Ce problème n'a pas été abordé à Stackoverflow - méthodes recommandées pour produire une application portable entre android-et-autres-plates-formes
k3b le
Peut-être que je pourrais le mettre dans Stackoverflow, ou ce serait contre les règles?
Gangnus
Vous pouvez demander à l'un des administrateurs de migrer cette question au lieu de dupliquer Qestion. Ici, sur programmersles questions sont plus controversées question "Que pensez-vous de .. / il est bon ou mauvais de ..." alors que stackoverflowserait plus comme "Y at-il des exemples de MVP dans Android". Pour moi, les deux endroits vont bien.
K3B
Je suis vraiment désolée pour mon malheur, mais jusqu'à présent, je n'ai pas trouvé le moyen de me connecter aux administrateurs :-(
Gangnus le
Cette question ne convient PAS pour Stack Overflow. En passant, vous pouvez contacter les modérateurs en signalant votre message à l’aide du lien "drapeau".
ChrisF

Réponses:

15

Les applications Android reposent fondamentalement sur le modèle-vue-contrôleur (MVC) - MVP ressemble à la même chose, bien que je n’aie jamais entendu le terme auparavant. Les activités remplissent le rôle de contrôleur, les vues XML ne sont que cela (bien que vous puissiez les construire par programme dans l'activité - il est simplement plus facile de le faire en XML) et le modèle que vous écrivez vous-même. Alors oui, ce modèle est assez pratique.

Une raison possible pour laquelle vous n’avez peut-être pas beaucoup entendu parler de ce modèle de conception est que la structure Android vous oblige à séparer la vue. Étant donné que les applications sur les appareils mobiles ont tendance à être petites, les utilisateurs n'utilisent généralement pas la technologie MVC complète. ils tendent vers les calques de vue et d'action où le calque d'action effectue l'essentiel du travail (petit) du modèle.

Si vous écrivez une application multiplate-forme, vous pouvez envisager une approche à quatre couches: Affichage, Action, Logique métier et Modèle. Les couches Vue et Action seraient spécifiques à la plate-forme, tandis que la logique et le modèle métier ne seraient pas modifiés. Fondamentalement, vous répartissez les interactions entre le présentateur et l'utilisateur en couche Action, qui appelle la couche Business Logic pour exécuter l'action souhaitée par l'utilisateur.

Michael K
la source
+1! Pourriez-vous donner une ou deux références à quelques bons textes?
Gangnus
4
Je pensais que MVP vous offrait la possibilité de garder la Actionplate-forme de couche (= Présentation) indépendante, du moins lorsque vos différentes plates-formes offrent des capacités d'interface utilisateur similaires.
Doc Brown le
@ DocBrown En théorie, oui. En pratique, je ne suis pas sûr que ce sera toujours possible, car les interactions des utilisateurs pourraient toucher la vue ou le présentateur. Par exemple, dans Android, les balayages sont gérés par l'activité, mais sur les pages Web, ils le sont par la vue (navigateur).
Michael K
12
"Les applications Android sont fondamentalement construites autour de Model-View-Controller", ce qui ne va pas à tant de niveaux, je suis désolé. L'architecture du framework Android est construite autour de classes divines où la logique View / Controller est encombrée.
Igor Filippov
2
J'aimerais pouvoir voter le commentaire de @ IgorFilippov plus d'une fois. L'idée que les applications Android implémentent MVC de par leur conception est une idée fausse commune. Contrairement à iOS, aucune architecture graphique n'est imposée par Android avec une séparation claire des préoccupations et un modèle isolé et facilement testable. Vous devez en fournir un vous-même, que ce soit MVP, MVC ou autre chose.
Piovezan
6

Je n'ai aucune expérience de la programmation Android, mais après un bref aperçu de quelques tutoriels d'introduction à la programmation pour Android, je ne vois pas pourquoi MVP serait moins utile que dans tout autre cadre basé sur des événements. La Activityclasse n'est pas très différente de la Dialogou Formde celles d'autres frameworks, il devrait donc être facile de créer une classe "Activitity Presenter" pour toute sous-classe d'activité de votre application et d'y insérer la logique principale.

Les événements envoyés à votre "Activité" doivent être délégués à votre présentateur. Si votre présentateur va envoyer des événements par lui-même ou appeler d'autres fonctions dépendant du système, votre Activité doit fournir des fonctions connexes via l'interface qu'il partage avec le présentateur. Mais c’est fondamentalement le même que dans tout autre framework d’interface graphique que je connaisse.

Doc Brown
la source
+1 merci pour votre temps. Mais comme vous le voyez d'une autre réponse, dans Android est utilisé modèle similaire, mais différent. "J'ai parlé en prose pendant 50 ans et je ne le savais pas!" Je vais maintenant essayer de regarder les différences entre les modèles.
Gangnus
4
@Gangnus: MVP est une forme spéciale de MVC, ici codebetter.com/jeremymiller/2007/07/26/… vous trouvez plus d'informations. Et je suis à peu près sûr que ce n’est pas une question de "MVC ou de MVP". Les activités peuvent être une forme de "contrôleur", mais elles dépendent de la plate-forme. En séparant la logique de l'interface utilisateur en classe de présentation indépendante de la plate-forme pour chaque activité, il sera probablement plus facile de les tester et de les transporter plus facilement.
Doc Brown le
5

MVP est certainement utile pour Android. Cela aide à organiser et à tester votre code. Et la meilleure partie est que les nouvelles personnes qui liront votre code seront en mesure de comprendre le code et commenceront à contribuer dès qu'elles sauront ce qui devrait aller où. Voici un lien très utile pour comprendre MVP avec des exemples .

Voici une brève explication des trois composants de MVP.

Vue

Dans Android MVP, une vue contient deux éléments Activité - ressource Android Vue - interface java Activité Implémente la vue et s’injecte (interface de visualisation) dans le présentateur afin que celui-ci puisse parler de l’activité à l’aide de l’interface de visualisation. Les trois premiers blocs du diagramme montrent la communication entre View et The Presenter.

Présentateur

Presenter agit en tant que couche intermédiaire entre View et Data / Model. View (Activité) commande au présentateur de présenter quelque chose. Le présentateur prend ensuite les données de la base de données / Modèle et redonne la forme présentable des données à la vue. View se charge ensuite d’afficher ces données à l’écran. Et rappelez-vous que Presenter est une classe Java simple, il ne devrait inclure aucun des composants Android, sinon les tests unitaires du présentateur seront compliqués.

Si vous souhaitez utiliser la base de données dans le présentateur, assurez-vous que activité crée une instance de base de données et l'injectez dans le présentateur. Cela vous aidera à simuler la base de données lors des tests unitaires et à tester la logique métier.

Modèle

Le modèle dans MVP n'est rien d'autre que votre source de données. View ne communique pas directement avec les données. Il demande à Presenter de gérer ces données et de restituer les informations qui peuvent être affichées sans aucune modification supplémentaire.

Ajit Singh
la source
1
Les informations sont utiles, merci, mais elles sont mal données. Vous devriez non seulement citer un site, même le vôtre, mais donner des informations ici. Les réponses de référence ne sont pas autorisées. Utilisez des commentaires à la place. Je ne le signale pas uniquement à cause des informations utiles sur votre site. S'il vous plaît, changez-le en un commentaire ou mettez dans la réponse des informations clés répondant au corps de la question. Alors, vous aurez sûrement non seulement mon avantage, mais même la réponse à votre question.
Gangnus
@Gangnus, j'ai fourni les informations nécessaires dans la réponse car mettre tout le contenu rendrait la réponse très complexe.
Ajit Singh
1
Il existe en fait deux types de MVP. Vue passive (ce que vous avez décrit ici) et Supervising Presenter, qui permet la liaison directe de données de la vue au modèle (un peu comme MVVM et de nombreux frameworks Web MVC).
RubberDuck