簡體   English   中英

MVP:View應該實現Presenter的界面,反之亦然?

[英]MVP: Should the View implement a Presenter's interface or vice versa?

我正在用GWT做我的第一步。 我看完之后有一個問題:

在第一個示例中, Presenter定義了View的接口。

public class ContactsPresenter implements Presenter {
  ...
  public interface Display extends HasValue<List<String>> {
    HasClickHandlers getAddButton();
    HasClickHandlers getDeleteButton();
    HasClickHandlers getList();
    void setData(List<String> data);
    int getClickedRow(ClickEvent event);
    List<Integer> getSelectedRows();
    Widget asWidget();
  }
}

在第二個中, View定義了Presenter的界面。

public interface ContactsView<T> {

  public interface Presenter<T> {
    void onAddButtonClicked();
    void onDeleteButtonClicked();
    void onItemClicked(T clickedItem);
    void onItemSelected(T selectedItem);
  }

  void setPresenter(Presenter<T> presenter);
  void setColumnDefinitions(List<ColumnDefinition<T>> columnDefinitions);
  void setRowData(List<T> rowData);
  Widget asWidget();
}

這種差異的想法是什么?

我該選哪個?

我認為你應該在你的問題中使用“定義”這個詞而不是“實現”,如果是這樣,那么哪個類定義接口並不重要。

您可以通過在自己的文件中定義接口來執行不同的操作。 在一天結束時,重要的是Presenter實現Presenter界面和View實現View界面。

@deepak這些都是有效的顧慮。 Word是感染實現而不是定義。

讓我解釋 。 在第一個示例中,演示者將合同保持在視圖必須實現的位置,換句話說,驅動應該通過經典MVP方法的視圖實現的內容。

在第二個例子中,事情變得混亂。 Presenter無法控制必須實現的視圖。 這不是MVP,谷歌稱之為MVP。 使用此方法無法使用JRE /單元測試來測試視圖。 雖然不是MVP和谷歌不應該調用這個MVP,但他們必須解釋為什么它是MVP?

@Saket Bansal分離界面是不正確的方法。 隨着應用程序的增長,它將導致難以維護的代碼。

在我看來,你可以采取任何一種方法,我記得谷歌說一些第一個為他們工作的adwords和第二波為。

您還應該如何看待來自jboss的GWTP或ERRAI等framworks

在第二個教程中,代碼更改為使用Presenter接口(在視圖中定義)以適應使用UiBinders和Java泛型。 我認為Presenter界面已移至View界面,因為它們共享相同的通用T.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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