2016-06-02 15 views
1

Zum Beispiel, wenn es eine Aktivität mit einer Schaltfläche (Ansicht) gibt. Wenn dies gedrückt wird, ruft es eine Presenter-Methode auf, diese Methode erhält eine Observable von einem Service (Model) - was lange dauern kann, um mit Ergebnissen zu antworten.Soll das Beobachten/Abonnieren auf der View oder dem Presenter erfolgen?

Soll der Abonnent für diese Ergebnisse auf dem Presenter gehalten werden? Abhängig von den Ergebnissen würde der Moderator dann die Aktionen der entsprechenden View aufrufen.

Oder sollte der Abonnent auf der Ansicht sein? Wie ich in diesen anderen Android-Beispielprojekten gesehen habe. In diesem Fall würde die Aktivität/das Fragment abhängig von den Ergebnissen des Abonnements andere View- oder Presenter-Methoden aufrufen.

Antwort

4

Das Hauptziel des MVP-Musters ist die Entkopplung des Datenzugriffsmechanismus von der Sicht (Aktivitäten, Fragmente). Um eine Anwendung leicht erweiterbar und wartbar zu machen, müssen wir gut getrennte Schichten definieren.

Wenn Sie Ihren Abonnenten in der Ansicht zurückgeben, wird das MVP-Muster unterbrochen. Sie sollten Ihre Sicht so dumm wie möglich machen. Sie sollten sich also auf der Präsentatorschicht anmelden und die Moderatorebene entscheiden lassen, was der nächste Schritt in der Ansicht sein soll. Es kann Situationen geben, in denen verschiedene Arten von Aktionen in der Ansicht auftreten können. Diese Logik sollte nicht sichtbar sein.

** NB: Dies ist nur ein Vorschlag. Machen Sie Ihre Meinung dumm. Aber Sie müssen entscheiden, wie dumm Sie die Ansicht basierend auf der Aktion machen, die es durchführt. Für ein Beispiel gibt es eine Schaltfläche, deren Klickereignis einen Ja/Nein-Dialog öffnet. Sie sollten den Moderator nicht darauf hinweisen, dass die Schaltfläche angeklickt wurde, und die Anzeige veranlassen, einen Dialog zu öffnen.

Aber die Situation, die Sie oben beschreiben, sollten Sie eine Presenter-Schicht verwenden.

1

Presenter sollte alle Logik und schweres Heben tun, während die Ansicht so einfach wie möglich ist. Es registriert nur Benutzereingaben und zeigt schließlich die Ergebnisse.

Soll der Abonnent für diese Ergebnisse auf dem Presenter gehalten werden? Dann je nach den Ergebnissen würde der Presenter die entsprechenden Views Aktionen aufrufen?

Ja, das ist der richtige Weg, es zu tun.

1

Ich würde vorschlagen, immer Abonnement auf Presenter zu halten. Wenn View das Modell "sehen" darf, sollte es nur in einfacher Weise mit Model interagieren, wie Datenbindung und einfache Validierung. Andernfalls ist View ein Dump, Presenter führt die gesamte Geschäftslogik aus.

Passive View und Supervising Controller sind zwei Varianten von MVP für Ihre Referenzen.

Bitte überprüfen Sie auch ein neues MVP-Framework für Android unter http://robo-creative.github.io/mvp. Proben dort erklären den Unterschied zwischen diesen Varianten. Habe Spaß!