3

阅读 MVP 模式后,我发现 View 和 Presenter 之间有两种通信模式:

  • View 不知道 Presenter,但提供 UI 控件来实现HasClickHandlerPresenter 注册其事件处理程序的接口。

  • View 知道 Presenter,特别是它知道 Presenter 中的处理程序方法名称,例如,当在 View 中单击提交按钮时,视图会调用onSubmitButtonClicked()Presenter 中的公共方法。

我发现后者更容易进行 JUnit 测试,因为我可以直接模拟向 Presenter 提交事件。但是,我的理解是 View 不应该知道 Presenter。

解决权衡的第三种方法是让 Presenter 在 View 的控件中注册事件处理程序,其中处理程序调用公共 Presenter 方法:

public void bind() {
  display.getSubmitButton().addClickHandler(new ClickHandler() {

    @Override
    public void onClick(ClickEvent event) {
      onSubmitButtonClicked();              
    }
  });
}

但这引入了很多样板代码。

View-Presenter 通信的正确模式是什么?

4

1 回答 1

0

我仍在尝试自己学习这些东西,但是我现在的想法是这样的:

public interface View {
    void registerMouseListener(MouseListener listener);
}

public class ViewImpl implements View {
    SomeComponent component; // SomeComponent extends java.awt.Component

    public void registerMouseListener(MouseListener listener) {
        component.addMouseListener(listener);
    }
}

然后,您可以通过添加匿名侦听器或扩展自身等Presenter来决定它想要注册这些事件的方式。MouseListener

于 2013-07-24T14:24:29.207 回答