[英]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.