Java MVP:视图是否应该实现一个演示者&x27;s接口,反之亦然?
我正在使用Java MVP:视图是否应该实现一个演示者&x27;s接口,反之亦然?,java,gwt,mvp,gwt-mvp,Java,Gwt,Mvp,Gwt Mvp,我正在使用GWT执行我的第一步。 读完后我有一个问题: 在第一个示例中,演示者定义了视图的接口 public class ContactsPresenter implements Presenter { ... public interface Display extends HasValue<List<String>> { HasClickHandlers getAddButton(); HasClickHandlers getDelet
GWT
执行我的第一步。
读完后我有一个问题:
演示者定义了视图的接口
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();
}
}
这种差异是什么意思
我应该选择哪一个?我认为你应该在问题中使用“defines”一词而不是“implements”,如果是这样的话,那么定义接口的类就无关紧要了。
您可以通过在自己的文件中定义接口来做一些不同的事情。最后,重要的是演示者实现演示者接口和视图实现视图接口。在第二个教程中,代码更改为使用演示者接口(在视图中定义),以适应UIBinder和Java泛型的使用。我认为Presenter界面被移动到了View界面,因为它们都共享相同的通用T。@deepak这些都是值得关注的问题。单词是感染实现而不是定义
让我解释一下。在第一个示例中,演示者持有视图必须实现的契约,换句话说,通过经典的MVP方法驱动视图应该实现的内容
在第二个例子中,情况变得混乱。演示者无法控制视图必须实现的内容。这不是MVP,谷歌称之为MVP。使用这种方法无法使用JRE/单元测试测试视图。这并不意味着它很糟糕,尽管它不是MVP,谷歌不应该称之为MVP,或者他们必须解释为什么它是MVP
@Saket Bansal分离接口的方法不正确。随着应用程序的增长,这将导致难以维护代码
在我看来,你可以采取任何一种方法,我记得谷歌曾说过,第一种方法对adwords有用,第二种方法对wave有用
无论您如何看待framworks,如GWTP或jboss,演示者都应该能够修改视图。因此,演示者只需要维护对其视图的引用。我不明白如果视图和演示者彼此实现,会得到什么。@Abhijeet Kashnia:这是两个不同的例子。检查链接,它们的作用是相同的,但它们的实现方式不同。即使在历史记录管理中,使用Activity和Places以及MVP,我们的Activity也实现了一个视图界面!MVP怎么样?
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();
}