[英]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和第二波為。
在第二個教程中,代碼更改為使用Presenter接口(在視圖中定義)以適應使用UiBinders和Java泛型。 我認為Presenter界面已移至View界面,因為它們共享相同的通用T.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.