15

私はで最初のステップを実行しています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();
}

この違いの考えは何ですか?

どちらを選ぶべきですか?

4

3 に答える 3

2

質問では、「実装」ではなく「定義」という単語を使用する必要があったと思います。その場合は、どのクラスがインターフェイスを定義するかは問題ではありません。

独自のファイルでインターフェースを定義することで、別のことを行うことができます。結局のところ、重要なのは、プレゼンターインターフェイスを実装するプレゼンターとビューインターフェイスを実装するビューです。

于 2010-07-22T13:02:59.867 に答える
2

@deepakこれらは有効な懸念事項です。Wordは定義ではなく実装に感染します。

説明させてください。最初の例では、プレゼンターは、ビューが実装する必要があるもの、つまり、ビューによって実装される必要があるものを従来のMVPアプローチで駆動するという契約を結んでいます。

2番目の例では物事が混乱します。Presenterがどのビューを実装する必要があるかを制御できない場合。これはMVPではなく、GoogleはこれをMVPと呼んでいます。このアプローチを使用して、JRE/単体テストでビューをテストする方法はありません。それは悪いことではありませんが、MVPとグーグルはこのMVPを呼び出すべきではありません、または彼らはそれがMVPである理由について説明しなければなりませんか?

@Saket Bansalがインターフェースを分離することは、正しいアプローチではありません。アプリケーションが大きくなるにつれて、コードを維持するのが難しくなります。

私の意見では、どちらのアプローチを取ることもできます。最初のアプローチはアドワーズ広告で、2番目のアプローチはウェーブで機能したとグーグルが言ったことを覚えています。

jbossのGWTPやERRAIのようなフレームワークもどのように見るべきか

于 2010-09-14T00:23:48.240 に答える
0

2番目のチュートリアルでは、UiBindersとJavaジェネリックの使用に対応するために、コードがPresenterインターフェイス(ビューで定義)を使用するように変更されました。プレゼンターインターフェイスは、両方とも同じ汎用Tを共有しているため、ビューインターフェイスに移動されたと思います。

于 2010-07-22T18:35:17.457 に答える