web-dev-qa-db-fra.com

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

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 qui montrent les éléments de l'interface graphique (partie View de MVP).

"Dans le modèle de présentation du présentateur, tout comme Martin Fowler ou Michael Feathers [2] le disent, la logique de l'interface utilisateur est séparé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é de ici ).

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

34
Gangnus

Les applications Android sont fondamentalement construites autour de Model-View-Controller (MVC) - MVP sonne comme 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 (même si vous pouvez les créer par programme dans l'activité - il est juste plus facile et plus simple 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 le cadre Android vous oblige à séparer la vue. Parce que l'application sur les appareils mobiles a tendance à être petite, les gens ne le font pas ont tendance à utiliser MVC complet; ils tendent vers les couches de vue et d'action où la couche d'action fait une grande partie du (petit) travail du modèle.

Si vous écrivez une application multiplateforme, vous souhaiterez peut-être envisager une approche à quatre couches: vue, 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 changeraient pas. Fondamentalement, vous répartissez l'interaction entre le présentateur et l'utilisateur sur la couche Action, qui appelle la couche Business Logic pour effectuer l'action souhaitée par l'utilisateur.

15
Michael K

Je n'ai aucune expérience sur la programmation Android, mais après un bref aperçu des didacticiels de programmation Android Android, je ne vois pas pourquoi MVP devrait être moins utile que dans n'importe quel autre framework événementiel. La classe Activity n'est pas très différente de Dialogor Form dans d'autres frameworks, donc il devrait être facile de créer un " Activitity Presenter "classe pour toute sous-classe d'activité de votre application et y mettre la logique de base.

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

6
Doc Brown

MVP est certainement utile pour Android. Il permet d'organiser et de tester à l'unité 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 doit aller où. Voici un lien très utile pour comprendre MVP avec des exemples .

Voici une brève explication des trois composants de MVP

Voir

Dans Android MVP, une vue contient deux choses Activity - Android Resource View - Java interface Interface Activity Implements the View and it s'injecte (interface View) dans le présentateur pour que le présentateur puisse parler de l'activité à l'aide de l'interface de vue. Les trois premiers blocs du diagramme montrent la communication entre View et The Presenter.

Présentateur

Le présentateur agit comme une couche intermédiaire entre la vue et les données/le modèle. La vue (activité) commande au présentateur de présenter quelque chose et le présentateur récupère ensuite les données de la base de données/du 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 simple classe Java classe, il ne doit inclure aucun des composants Android sinon cela rendra difficile le test unitaire du présentateur).

Si vous souhaitez utiliser la base de données dans le présentateur, faites en sorte que l'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 vous permettra de 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 parle pas directement aux données, mais commande à Presenter de gérer les données et de rendre les informations qui peuvent être affichées sans autre modification.

5
Ajit Singh