web-dev-qa-db-fra.com

Android MVP: Qu'est-ce qu'un interacteur?

Qu'est ce qu'un Interactor? Comment s'intègre-t-il dans la conception de MVP? Quels sont les avantages/inconvénients de l'utilisation d'un interacteur par rapport à l'insertion du code de l'interacteur dans le présentateur?

52
bkach

Le MVP existe pour s'attaquer au problème de l'activité de Dieu (une activité/fragment qui a trop de lignes).

Bien que ce ne soit pas obligatoire (vous pouvez coder selon le modèle de votre choix), de nombreux développeurs conviennent que MVP convient à Android. Cela rend votre code source plus propre, testable, maintenable et robuste.

Vous pouvez considérer un interacteur comme votre "Modèle/Contrôleur". Un interacteur va récupérer les données de votre base de données, de vos services Web ou de toute autre source de données. Après avoir récupéré les données, l’interacteur envoie les données au présentateur. Ainsi, apportant des modifications dans votre interface utilisateur.

L’utilisation d’interactor dans une classe distincte présente les avantages suivants: elle découplera votre classe, le rendant ainsi plus propre et testable. Bien sûr, vous pouvez placer l’interacteur dans la classe interne de votre présentateur, mais à quoi sert-il? Si vous placez l’interacteur dans votre présentateur, vous aurez l’inconvénient de le rendre plus grand et relativement plus difficile à lire et à gérer.

Mise à jour: Bien sûr, il s’agit là d’une simplification excessive. Si vous voulez aller plus loin, vous verrez peut-être blog de fernando cejas ou blog d’Antonio leiva

92
aldok

Interactor est une classe qui sépare la couche de domaine de la couche de présentation. En termes simples, il fournit un moyen d'écrire la logique métier séparément du code utilisé pour manipuler l'interface utilisateur (en liant les données à l'interface utilisateur/animate/navigation).

Ainsi, Interactor est un médiateur entre les modèles Presenter/ViewModel et Repository.

Je n'ai pas utilisé le modèle Interactor dans MVP, je l'ai cependant utilisé dans MVVM. Interactor peut être utilisé de manière interchangeable pour UseCases.

Par exemple, prenons le cas d'utilisation de l'extraction de catégories à afficher dans une liste (dans l'exemple ci-dessous, Presenter représente MVP et ViewModel représente un modèle MVVM).

  • View (Activity/Fragment) appellera la méthode de Presenter/ViewModel pour obtenir categoryList.
  • Ensuite, Presenter/ViewModel appellera la méthode de interactor pour obtenir categoryList.
  • Interactor appellera la méthode (CategoryRepository) de Repository pour obtenir categoryList.
  • Le référentiel disposera d'une logique lui permettant de choisir entre extraire des catégories du service Web (source de données distante), du stockage de la base de données (source de données locale) ou du cache (stockage temporaire - peut être variable dans la classe du référentiel).
  • Le référentiel renverra categoryList (extrait de la source de données sélectionnée) à Interactor.
  • Interactor va soit traiter sur categoryList (certains formatages, etc.) et l'envoyer à Presenter/ViewModel. Interactor peut directement envoyer la liste à Presenter/ViewModel si aucun traitement n'est nécessaire.
  • Presenter/ViewModel appellera la méthode View avec categoryList comme paramètre
  • La vue affichera categoryList avec ou sans animation

Veuillez noter que dans ce processus, Interactor peut être évité. Ainsi, au lieu d'utiliser un flux de données comme ceci Repository-> Interactor-> Presenter/ViewModel , la communication peut être s'est passé par Repository-> Presenter/ViewModel de cette façon. Ici, Presenter/ViewModel fera partie de la présentation et de la couche de domaine. Comme je l'ai dit plus haut, Interactor agit en tant que séparateur de ces deux couches.

Voici quelques blogs rédigés de manière concise pour expliquer ce concept à titre de référence.

J'espère que cela vous aidera à mieux comprendre le rôle d'Interactor. Bonne codage !!!

33
silwar

Interactor contient les cas d'utilisation de l'application, ce qui signifie qu'elle contiendra toutes les implémentations du domaine métier du projet.

Voici un article très bien organisé sur Architecturing Android Applications, en utilisant le modèle MVP. , que je vous recommande vivement d'étudier.

J'ai aussi créé une Android appelée JuicyInsta, à l'aide du modèle MVP et de Instagram. API, qui est partagé ici sur github.

8
Farhad Faghihi

Personnellement, j'utilise View, Present et Interactor, ce qui pour moi est différent du modèle.

Vous pouvez penser à un Interactor en tant que classe avec des méthodes utiles pour récupérer les données de la base de données, du serveur, etc.. Une fois les données obtenues, vous pouvez renseigner votre modèle dans Interactor et le restituer à l'animateur.

PAR EXEMPLE. Vous pouvez avoir un LoginInteractor qui crée un Asynctask pour authentifier l'utilisateur, puis remplir UserModel avec les données reçues.

4
br00