it-swarm.com.de

Android MVP: Was ist ein Interactor?

Was ist ein Interaktor? Wie passt es in das MVP-Design? Welche Vor- und Nachteile hat die Verwendung eines Interaktors gegenüber dem Einfügen des Interaktorkodes in den Präsentator?

52
bkach

MVP ist vorhanden, um das Problem der Gottesaktivität anzugehen (eine Aktivität/ein Fragment, das viel zu viele Zeilen enthält).

Während es nicht obligatorisch war (Sie können in jedem gewünschten Muster codieren), stimmen viele Entwickler zu, dass MVP für Android geeignet ist. Es macht Ihren Quellcode sauberer, prüfbarer, wartbarer und robuster.

Sie können sich einen Interaktor als Ihr "Modell/Controller" vorstellen. Ein Interakteur ruft Daten aus Ihrer Datenbank, Ihren Webdiensten oder einer anderen Datenquelle ab. Nach dem Abrufen der Daten sendet der Interakteur die Daten an den Präsentator. So nehmen Sie Änderungen in Ihrer Benutzeroberfläche vor.

Die Verwendung von interactor in einer separaten Klasse hat den Vorteil, dass Ihre Klasse entkoppelt wird und somit sauberer und überprüfbarer wird. Sicher, Sie können den Interakteur in die innere Klasse Ihres Präsentators einordnen, aber worum geht es? Der Nachteil des Einbaus des Interaktors in Ihren Presenter ist, dass Ihre Presenter-Klasse dadurch größer und relativ schwer zu lesen und zu verwalten ist.

Update: Natürlich ist dies nur eine Übervereinfachung, wenn Sie tiefer graben möchten, sehen Sie vielleicht fernando cejas blog oder antonio leiva blog

92
aldok

Interactor ist eine Klasse, die Domain Layer von Presentation Layer trennt. Mit einfachen Worten, es bietet die Möglichkeit, Geschäftslogik getrennt von Code zu schreiben, der zur Manipulation der Benutzeroberfläche verwendet wird (durch Binden von Daten an Benutzeroberfläche/Animation/Navigation).

Interactor ist also ein Mittler zwischen Presenter/ViewModel und Repository-Muster.

Ich habe Interactor-Muster in MVP nicht verwendet, aber ich habe es in MVVM verwendet. Interactor kann für UseCases austauschbar verwendet werden.

Nehmen wir zum Beispiel den Fall, dass Kategorien abgerufen werden, um sie in der Liste anzuzeigen (im folgenden Beispiel steht Presenter für MVP und ViewModel für MVVM-Muster).

  • View (Activity/Fragment) ruft die Presenter/ViewModel-Methode auf, um categoryList abzurufen.
  • Dann ruft Presenter/ViewModel die Methode von interactor auf, um categoryList abzurufen
  • Interactor ruft die Repository-Methode (CategoryRepository) auf, um die Kategorieliste abzurufen
  • Das Repository verfügt über eine Logik, mit der entschieden werden kann, ob Kategorien vom Web-Service (Remote-Datenquelle) oder vom DB-Speicher (lokale Datenquelle) oder vom Cache (temporärer Speicher - kann in der Repository-Klasse variabel sein) abgerufen werden.
  • Das Repository gibt die Kategorieliste (aus der ausgewählten Datenquelle abgerufen) an Interactor zurück
  • Interactor verarbeitet entweder die Kategorieliste (einige Formatierungen usw.) und sendet sie an Presenter/ViewModel. Interactor kann die Liste direkt an Presenter/ViewModel senden, wenn keine Verarbeitung erforderlich ist
  • Presenter/ViewModel ruft die View-Methode mit categoryList als Parameter auf
  • In der Ansicht wird die Kategorieliste mit oder ohne Animation angezeigt

Bitte beachten Sie, dass in diesem Prozess Interactor vermieden werden kann, sodass anstelle des Datenflusses wie folgt Repository-> Interactor-> Presenter/ViewModel die Kommunikation erfolgen kann passiert durch Repository-> Presenter/ViewModel auf diese Weise. Hier wird Presenter/ViewModel Teil der Präsentations- und Domain-Ebene. Wie ich oben sagte, fungiert Interactor als Separator dieser beiden Ebenen.

Dies sind einige präzise geschriebene Blogs, die dieses Konzept als Referenz erläutern

Ich hoffe, dies wird Ihnen helfen, die Rolle von Interactor besser zu verstehen. Happy Coding !!!

33
silwar

Interactor enthält die Anwendungsfälle der Anwendung, dh, es enthält alle Implementierungen für den Geschäftsbereich des Projekts.

Hier ist ein sehr gut organisierter Artikel über Architektur Android Anwendungen, die das MVP-Muster verwenden. , den ich Ihnen sehr empfehlen kann, zu studieren.

Außerdem habe ich eine Android Anwendung namens JuicyInsta mit dem MVP-Muster und Instagram erstellt API, die hier auf Github geteilt wird.

8
Farhad Faghihi

Persönlich benutze ich View, Present und Interactor, die sich für mich vom Modell unterscheiden.

Sie können sich einen Interactor als eine Klasse mit nützlichen Methoden zum Abrufen der Daten aus der Datenbank, dem Server usw. vorstellen . Nachdem Sie die Daten erhalten haben, können Sie Ihr Modell in Interactor einfügen und an Presenter zurückgeben.

Z.B. Sie können einen LoginInteractor verwenden, der eine Asynctask erstellt, um den Benutzer zu authentifizieren und dann das UserModel mit den empfangenen Daten zu füllen.

4
br00