Jugador Más Valioso:¿Debería la Vista implementar la interfaz de un Presentador o viceversa?

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

  •  27-09-2020
  •  | 
  •  

Pregunta

Estoy haciendo mis primeros pasos con GWT.Tengo una pregunta después de leer:

En el primer ejemplo el Presenter define la interfaz para el 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();
  }
}

Y en el segundo, el View define la interfaz para el 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();
}

¿Cuál es la idea de esta diferencia?

¿Cual deberia elegir?

¿Fue útil?

Solución

Creo que deberías haber usado la palabra "define" en tu pregunta en lugar de "implementa" y, si ese es el caso, entonces no importa qué clase define la interfaz.

Podrías hacer algo diferente definiendo las interfaces en sus propios archivos.Al final del día, lo único que importa es que el Presentador implemente la interfaz del Presentador y la Vista que implemente la interfaz de la Vista.

Otros consejos

@deepak estas son preocupaciones válidas.La palabra es una implementación infectada, no una definición.

Dejame explicar .En el primer ejemplo, los presentadores mantienen el contrato sobre qué vista debe implementar; en otras palabras, impulsan lo que las vistas deben implementar: un enfoque MVP clásico.

Las cosas se vuelven confusas en el segundo ejemplo.Donde el Presentador no tiene control sobre qué vista debe implementar.Esto no es MVP y Google lo llama MVP.No hay forma de probar las vistas con JRE/pruebas unitarias utilizando este enfoque.Eso no lo hace malo, aunque simplemente no es MVP y Google no debería llamarlo MVP o deben explicar por qué es un MVP.

@Saket Bansal separar la interfaz no es el enfoque correcto.Resultará difícil mantener el código a medida que la aplicación crezca.

En mi opinión, puedes adoptar cualquiera de los dos enfoques. Recuerdo que Google dijo que el primero les funcionó para AdWords y el segundo para Wave.

De todos modos, también deberías mirar marcos como GWTP o ERRAI de jboss

En el segundo tutorial, el código se cambió para usar una interfaz Presenter (definida en la vista) para adaptarse al uso de UiBinders y genéricos de Java.Creo que la interfaz del Presentador se trasladó a la interfaz Ver ya que ambas comparten la misma T genérica.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top