【问题标题】:MVP: Should the View implement a Presenter's interface or vice versa?MVP:视图是否应该实现 Presenter 的接口,反之亦然?
【发布时间】:2011-03-19 13:14:16
【问题描述】:

我正在使用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();
}

这个区别是什么意思?

我应该选择哪个?

【问题讨论】:

  • 演示者应该能够修改视图。因此,演示者只需要维护对其视图的引用。我不明白如果视图和演示者相互实现会得到什么。
  • @Abhijeet Kashnia:这是两个不同的例子。检查链接,它们的作用相同,但实现方式不同。
  • 即使在使用 Activity 和 Places 以及 MVP 的历史管理中,我们也有实现视图界面的 Activity! MVP 怎么样?

标签: java gwt mvp gwt-mvp


【解决方案1】:

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

您可以通过在自己的文件中定义接口来做一些不同的事情。归根结底,重要的是 Presenter 实现 Presenter 接口和 View 实现 View 接口。

【讨论】:

    【解决方案2】:

    @deepak 这些都是有效的问题。 Word 是感染实现而不是定义。

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

    在第二个例子中事情变得混乱了。 Presenter 无法控制必须实现的视图。这不是 MVP,谷歌将其称为 MVP。您无法使用这种方法通过 JRE/unit 测试来测试视图。虽然不是 MVP,但谷歌不应该称之为 MVP,否则他们必须解释为什么它是 MVP?

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

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

    您还应该如何看待来自 jboss 的 GWTP 或 ERRAI 等框架

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-05-08
        • 2020-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-15
        • 2017-08-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多