MVP:ビューが発表者のインターフェースを実装するか、またはその逆ですか。
質問
GWT
で最初の手順を実行しています。
私は読んだ後に質問があります:
最初の例では、Presenter
は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();
}
}
.
と2番目のものでは、View
は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();
}
.
この違いの考えは何ですか?
どちらを選ぶべきですか?
解決
私はあなたが「実装」の代わりにあなたの質問で「定義」という言葉を使ったこと、そしてそれがそれがどのクラスを定義しているかは関係ありません。
それ自身のファイルのインターフェイスを定義することによって異なるものをすることができます。一日の終わりに、重要なことは、プレゼンターインターフェースを実装し、ビューインターフェイスを実装するプレゼンターです。
他のヒント
@ディッパーこれらは有効な懸念です。 Wordは定義ではなく感染していません。
説明しましょう。最初の例では、プレゼンターは、他の言葉で実装されているものに契約を保持しています。
物事は2番目の例で混乱を招く。プレゼンターにはどのビューを実装しなければならないかを制御していません。これはMVPではなく、GoogleはMVPとして呼び出されています。このアプローチを使用してJRE / Unitテストでビューをテストできる方法はありません。 MVPとGoogleがこのMVPを呼び出さないでください。なぜそれがMVPですか?
の理由について説明しなければならないが、それは悪くなりません。@Saket Bansal分離インターフェースは正しいアプローチではありません。アプリケーションが成長するにつれてコードを維持することは困難になります。
私の意見では、どちらのアプローチも取ることができます、私はGoogleを覚えています。
gwtpまたは errai から
2番目のチュートリアルでは、UIBINDERSとJava Genericsを使用して、Presenterインタフェース(ビューで定義されている)の使用に変更されました。両方とも同じ汎用Tを共有すると、プレゼンターのインターフェースがビューインターフェイスに移動されました。