gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:54:13 30 4
gpt4 key购买 nike

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

  • View 不识别 Presenter,但提供实现 HasClickHandler 接口(interface)的 UI 控件,Presenter 在其中注册其事件处理程序。

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

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

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

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

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

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

View -演示者通信的正确模式是什么?

最佳答案

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

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 本身等。

关于java - MVP 中 View 和 Presenter 之间的通信模式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15309449/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com