在阅读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();
}
});
}
但这会引入大量样板代码。
视图-表示器通信的正确模式是什么?