MVP:Soll die Ansicht die Oberfläche eines Präsentators implementieren oder umgekehrt?
Frage
Ich mache meine ersten Schritte mit GWT
.Ich habe eine Frage nach dem Lesen:
- Anwendungsentwicklung im großen Maßstab und MVP
- Anwendungsentwicklung und MVP im großen Maßstab - Teil II
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?
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.