MVP: Должен ли представление реализовать интерфейс докладчика или наоборот?

StackOverflow https://stackoverflow.com/questions/3309029

  •  27-09-2020
  •  | 
  •  

Вопрос

Я делаю свои первые шаги с 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();
  }
}
.

А во втором, генеракодицетагкод определяет интерфейс для генеракодицетагкода.

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();
}
.

Что такое идея этой разницы?

Что я должен выбрать?

Это было полезно?

Решение

Я думаю, что вы должны были использовать слово «определить» в своем вопросе, а не «орудия», а если это так, то не имеет значения, какой класс определяет интерфейс.

Вы можете сделать что-то другое, определив интерфейсы в свои собственные файлы.В конце дня все, что имеет значение, является ведущим, реализующим интерфейс ведущего и представление, реализующее интерфейс просмотра.

Другие советы

@deepak Это действительные проблемы. Слово инфицирует реализацию не определение.

Позвольте мне объяснить. В первом примере ведущих удерживают контракт на то, что предпринимает представление другими словами, которые должны быть реализованы представлениями классического MVP подход.

вещи путают во втором примере. Там, где ведущий не имеет контроля над тем, что может реализовать представление. Это не MVP, и Google называет его MVP. Вы не можете проверить представления с тестами JRE / Unit, используя этот подход. Это не делает это плохо, хотя просто не MVP и Google не должны вызывать этот MVP или они должны объяснить, почему это MVP?

@saket Bansal разделяющий интерфейс не правильный подход. Это приведет к трудному поддержанию кода, поскольку приложение растет.

На мой взгляд, вы можете принять любой подход, я помню, что Google говорит о том, где сначала работал для них для AdWords и второго для волны.

Любой, как вы также должны посмотреть на Framworks, такие как GWTP или Errai от JBoss

Во втором уроке код был изменен на использование интерфейса ведущего (определено в поле зрения) для размещения использования Uibinders и Java.Я думаю, что интерфейс ведущего был перемещен в интерфейс просмотра, поскольку они оба имеют одинаковую общий T.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top