Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java MVP:视图是否应该实现一个演示者&x27;s接口,反之亦然?_Java_Gwt_Mvp_Gwt Mvp - Fatal编程技术网

Java MVP:视图是否应该实现一个演示者&x27;s接口,反之亦然?

Java MVP:视图是否应该实现一个演示者&x27;s接口,反之亦然?,java,gwt,mvp,gwt-mvp,Java,Gwt,Mvp,Gwt Mvp,我正在使用GWT执行我的第一步。 读完后我有一个问题: 在第一个示例中,演示者定义了视图的接口 public class ContactsPresenter implements Presenter { ... public interface Display extends HasValue<List<String>> { HasClickHandlers getAddButton(); HasClickHandlers getDelet

我正在使用
GWT
执行我的第一步。 读完后我有一个问题:

在第一个示例中,
演示者定义了
视图的接口

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();
  }
}
这种差异是什么意思


我应该选择哪一个?

我认为你应该在问题中使用“defines”一词而不是“implements”,如果是这样的话,那么定义接口的类就无关紧要了。


您可以通过在自己的文件中定义接口来做一些不同的事情。最后,重要的是演示者实现演示者接口和视图实现视图接口。

在第二个教程中,代码更改为使用演示者接口(在视图中定义),以适应UIBinder和Java泛型的使用。我认为Presenter界面被移动到了View界面,因为它们都共享相同的通用T。

@deepak这些都是值得关注的问题。单词是感染实现而不是定义

让我解释一下。在第一个示例中,演示者持有视图必须实现的契约,换句话说,通过经典的MVP方法驱动视图应该实现的内容

在第二个例子中,情况变得混乱。演示者无法控制视图必须实现的内容。这不是MVP,谷歌称之为MVP。使用这种方法无法使用JRE/单元测试测试视图。这并不意味着它很糟糕,尽管它不是MVP,谷歌不应该称之为MVP,或者他们必须解释为什么它是MVP

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

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


无论您如何看待framworks,如GWTP或jboss,演示者都应该能够修改视图。因此,演示者只需要维护对其视图的引用。我不明白如果视图和演示者彼此实现,会得到什么。@Abhijeet Kashnia:这是两个不同的例子。检查链接,它们的作用是相同的,但它们的实现方式不同。即使在历史记录管理中,使用Activity和Places以及MVP,我们的Activity也实现了一个视图界面!MVP怎么样?
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();
}