我正在使用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();
}
这种差异的想法是什么?
我应该选择哪个?
答案 0 :(得分:2)
我认为你应该在你的问题中使用'定义'这个词而不是'implements',如果是这样的话,那么哪个类定义接口并不重要。
您可以通过在自己的文件中定义接口来做一些不同的事情。最重要的是Presenter实现Presenter界面和View实现View界面。
答案 1 :(得分:2)
@deepak这些都是有效的顾虑。 Word是感染实现而不是定义。
让我解释一下。在第一个示例中,演示者将合同保持在视图必须实现的位置,换言之,驱动视图应该通过经典MVP方法实现的内容。
第二个例子让事情变得混乱。 Presenter无法控制必须实现的视图。这不是MVP,谷歌称之为MVP。使用此方法无法使用JRE /单元测试来测试视图。虽然不是MVP和谷歌不应该调用这个MVP,或者他们必须解释为什么它是一个MVP,这并不会让它变坏?
@Saket Bansal分离界面是不正确的方法。随着应用程序的增长,它将导致难以维护的代码。
在我看来,你可以采取任何一种方法,我记得谷歌说一些第一个为他们工作的adwords和第二个为wave。
你应该如何看待像GWTP这样的framworks或者来自jboss的ERRAI
答案 2 :(得分:0)
在第二个教程中,代码更改为使用Presenter接口(在视图中定义)以适应使用UiBinders和Java泛型。我认为Presenter界面已移至View界面,因为它们共享相同的通用T。