MVP中视图和展示器之间的通信模式有哪些?

3

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

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

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

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

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

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

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

但这会引入大量样板代码。
视图-表示器通信的正确模式是什么?
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本身等方式。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接