MVP:视图应该实现演示者的界面,还是反之亦然?

2022-09-03 16:03:49

我正在使用 .我读完后有一个问题:GWT

在第一个示例中,定义了 的接口。PresenterView

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();
  }
}

在第二个中,定义了 .ViewPresenter

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();
}

这种差异的含义是什么?

我应该选择哪一个?


答案 1

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

您可以通过在自己的文件中定义接口来执行其他操作。归根结底,重要的是演示者实现演示者接口和视图实现视图界面。


答案 2

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

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

在第二个例子中,事情变得令人困惑。其中,演示者无法控制必须实现的视图。这不是MVP,谷歌称之为MVP。无法使用此方法使用 JRE /单元测试来测试视图。这并不会让它变得糟糕,尽管不是MVP,谷歌不应该称这个MVP,或者他们必须解释为什么它是MVP?

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

在我看来,你可以采取任何一种方法,我记得谷歌说过一些第一个为他们工作的广告词,第二个为波工作。

任何你也应该如何看待像GWTP或ERRAI这样的框架工程从jboss


推荐