[英]What are the patterns in communication between View and Presenter in 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通信的正确模式是什么?
我自己还在尝试学习这些东西,但我现在想的方式是这样的:
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
本身等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.