MVP:Soll die Ansicht die Oberfläche eines Präsentators implementieren oder umgekehrt?

StackOverflow https://stackoverflow.com/questions/3309029

  •  27-09-2020
  •  | 
  •  

Frage

Ich mache meine ersten Schritte mit GWT.Ich habe eine Frage nach dem Lesen:

Im ersten Beispiel wird die Presenter definiert die Schnittstelle für die View.

public class ContactsPresenter implements Presenter {
  ...
  public interface Display extends HasValue<List<String>> {
    HasClickHandlers getAddButton();
    HasClickHandlers getDeleteButton();
    HasClickHandlers getList();
    void setData(List<String> data);
    int getClickedRow(ClickEvent event);
    List<Integer> getSelectedRows();
    Widget asWidget();
  }
}

Und in der zweiten, der View definiert die Schnittstelle für die Presenter.

public interface ContactsView<T> {

  public interface Presenter<T> {
    void onAddButtonClicked();
    void onDeleteButtonClicked();
    void onItemClicked(T clickedItem);
    void onItemSelected(T selectedItem);
  }

  void setPresenter(Presenter<T> presenter);
  void setColumnDefinitions(List<ColumnDefinition<T>> columnDefinitions);
  void setRowData(List<T> rowData);
  Widget asWidget();
}

Was ist die Idee dieses Unterschieds?

Was soll ich wählen?

War es hilfreich?

Lösung

Ich denke, Sie hätten in Ihrer Frage das Wort 'definiert' anstelle von 'implementiert' verwenden sollen und wenn das der Fall ist, dann es spielt keine Rolle, welche Klasse die Schnittstelle definiert.

Sie könnten etwas anderes tun, indem Sie die Schnittstellen in eigenen Dateien definieren.Letztendlich zählt nur der Präsentator, der die Präsentatorschnittstelle implementiert, und die Ansicht, die die Ansichtsschnittstelle implementiert.

Andere Tipps

@deepak, das sind berechtigte Bedenken.Wort ist infizierte Implementierung, nicht Definition.

Lass es mich erklären .Im ersten Beispiel halten Präsentatoren den Vertrag fest, welche Ansicht implementiert werden muss, mit anderen Worten, was von Ansichten implementiert werden soll, ein klassischer MVP-Ansatz.

Im zweiten Beispiel wird es verwirrend.Wobei der Präsentator keine Kontrolle darüber hat, welche Ansicht implementiert werden muss.Dies ist kein MVP und Google nennt es MVP .Mit diesem Ansatz können Sie die Ansichten auf keinen Fall mit JRE / Unit-Tests testen.Das macht es nicht schlecht, aber einfach nicht MVP und Google sollte dieses MVP nicht nennen oder sie müssen erklären, warum es ein MVP ist?

@Saket Bansal Das Trennen der Schnittstelle ist kein korrekter Ansatz.Dies führt zu schwer zu wartendem Code, wenn die Anwendung wächst.

Meiner Meinung nach können Sie beide Ansätze wählen, ich erinnere mich, dass Google einige gesagt hat, bei denen der erste für AdWords und der zweite für Wave für sie gearbeitet hat.

Wie auch immer Sie sich Frameworks wie GWTP oder ansehen sollten ERRAIS von jboss

Im zweiten Lernprogramm wurde der Code so geändert, dass eine Presenter-Schnittstelle (in der Ansicht definiert) verwendet wird, um die Verwendung von UiBindern und Java-Generika zu ermöglichen.Ich denke, die Presenter-Oberfläche wurde in die View-Oberfläche verschoben, da beide dasselbe generische T verwenden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top