2017-03-20 4 views
2

Planung auf die MVP-Architektur für eine MVC-Typ Android App zu implementieren. Ich habe Bedenken, wie ich einen Moderator erstellen kann, der mehrere Modelle haben wird.android MVP - Presenter mit mehreren Modellen

Typischerweise wird ein Moderator Konstruktor wie folgt aussehen:

MyPresenter (IView Ansicht, IInteractor Modell);

Auf diese Weise kann ich Abhängigkeiten austau- schen, wenn ich versuche, die Ansicht und das Modell zu testen. Aber stellen Sie sich vor, mein Moderator ist an eine Aktivität gebunden, bei der es sich um mehrere Netzwerkanrufe handeln muss. So habe ich zum Beispiel eine Aktivität, die einen API-Aufruf für die Anmeldung ausführt und dann eine weitere für Sicherheitsfragen und dann eine dritte für GetFriendsList. Alle diese Anrufe haben dasselbe Aktivitätsthema. Wie mache ich das mit dem oben gezeigten Konstruktor? oder was ist der beste Weg, um so etwas zu tun? Oder bin ich darauf beschränkt, nur ein Modell zu haben und die Dienste innerhalb dieses Modells aufzurufen?

+0

behandeln Wenn Sie einige Open-Source-Projekt von Google suchen sich, sie nur 1-1-1 Ansatz verwenden (es bedeutet 1 Aufruf, 1 Präsentator 1-Modell). Jede Transaktion hat einen spezifischen Parameter (Parameter Enum und Bundle). Die Enum entscheidet, welche API du verwenden willst und das Bundle repräsentiert die Eingaben. Ich sage nicht, dass dies das Richtige ist, aber die Quelle ist zuverlässig genug. – Enzokie

+0

Das macht Sinn – j2emanue

Antwort

2

Presenter-Konstruktor benötigen nur die Ansicht. Sie müssen nicht abhängig vom Modell sein. Definieren Sie Ihren Moderator und eine solche Ansicht.

public interface Presenter{ 
    void getFriendList(Model1 model); 
    void getFeature(Model2 model2); 

    public interface View{ 
     void showFriendList(Model1 model); 
     void showFeature(Model2 model2) 
    } 
    } 

Jetzt ist Ihre Implementierungsklasse nur abhängig vom Ansichtsteil.

Rest Ihre Methode wird Ihr Modell

class PresenterImpl implements Presenter{ 
    View view; 
    PresenterImpl(View view){ 
    this.view = view; 
    } 
    void getFriendList(Model1 model){ 
    //Do your model work here 
    //update View 
    view.showFriendList(model); 
    } 
    void getFeature(Model2 model2) { 
    //Do your model work here 
    //updateView 
    view.showFeature(model2) 

    } 
} 
Verwandte Themen