MVP: должен ли вид реализовывать интерфейс докладчика или наоборот?
Я делаю свои первые шаги с 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();
}
В чем смысл этого различия?
Что я должен сделать? выбрать?
3 ответа:
Я думаю, что вы должны были использовать слово "defines" в вашем вопросе вместо "implements", и если это так, то не имеет значения, какой класс определяет интерфейс.
Вы можете сделать что-то другое, определив интерфейсы в своих собственных файлах. В конце концов, все, что имеет значение, - это ведущий, реализующий интерфейс Presenter, и представление, реализующее интерфейс View.
@ deepak это обоснованные опасения . Слово заражает реализацию, а не определение .
Позвольте мне объяснить . В первом примере докладчики держат контракт на то, что view должен реализовать другими словами управляет тем, что должно быть реализовано views классический подход MVP .
Во втором примере все становится запутанным. Где ведущий не имеет никакого контроля над тем, что представление должно реализовать . Это не MVP, и google называет его MVP . Нет никакого способа, вы можете проверить мнения с JRE /блок тесты, использующие этот подход . Это не делает его плохим, хотя просто не MVP и google не должен называть это MVP или они должны объяснить, почему это MVP ?
@Saket Bansal разделение интерфейса не является правильным подходом . Это приведет к тому, что будет трудно поддерживать код по мере роста приложения .
На мой взгляд, вы можете использовать любой подход, я помню, как google говорил, что первый работал на них для adwords, а второй-для wave .
Любой, как вы должны также смотреть на фреймворки, такие как GWTP или ERRAI от jboss