我正在做我的第一步 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();
  }
}

而在第二个中, 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();
}

这种差异的想法是什么?

我应该选择哪个?

有帮助吗?

解决方案

我认为您应该在问题中使用“定义”一词而不是“实现”,如果是这样的话 哪个类定义接口并不重要。

您可以通过在自己的文件中定义接口来执行不同的操作。归根结底,最重要的是实现 Presenter 接口的 Presenter 和实现 View 接口的 View。

其他提示

@deepak 这些都是合理的担忧。单词感染的是实现而不是定义。

让我解释 。在第一个示例中,演示者遵守视图必须实现的约定,换句话说,驱动视图应该实现什么,这是经典的 MVP 方法。

在第二个例子中事情变得混乱。Presenter 无法控制必须实现的视图。这不是 MVP,谷歌称其为 MVP。您无法使用这种方法通过 JRE/单元测试来测试视图。这并不会让事情变得更糟糕,尽管它不是 MVP,而且谷歌不应该称这个 MVP,或者他们必须解释为什么它是 MVP?

@Saket Bansal 分离接口不是正确的方法。随着应用程序的增长,这将导致代码难以维护。

在我看来,你可以采取任何一种方法,我记得谷歌说过,第一种方法适用于 adwords,第二种方法适用于 wave。

不管怎样,你也应该看看 GWTP 或 埃拉伊 来自jboss

在第二个教程中,代码更改为使用 Presenter 接口(在视图中定义)以适应 UiBinder 和 Java 泛型的使用。我认为 Presenter 接口已移至 View 接口,因为它们共享相同的通用 T。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top