簡體   English   中英

MVP中View和Presenter之間的通信模式是什么?

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM