MVP中View和Presenter之间的通信模式是什么?

时间:2013-03-09 10:03:20

标签: java mvp

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

  • View不知道Presenter ,但提供实现HasClickHandler界面的UI控件,其中Presenter注册其事件处理程序。

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

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

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

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

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

但是这引入了许多样板代码。

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

1 个答案:

答案 0 :(得分: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本身等等。