java - mvc - MVP: ¿Debería implementar View en la interfaz de un presentador o viceversa?
mvp vs mvc (3)
Creo que debería haber usado la palabra ''define'' en su pregunta en lugar de ''implements'' y si ese es el caso, entonces no importa qué clase define la interfaz.
Podría hacer algo diferente definiendo las interfaces en sus propios archivos. Al final del día, todo lo que importa es el presentador que implementa la interfaz del presentador y la vista que implementa la interfaz de View.
Estoy dando mis primeros pasos con GWT
. Tengo una pregunta después de leer:
- Desarrollo de aplicaciones a gran escala y MVP
- Desarrollo de aplicaciones a gran escala y MVP - Parte II
En el primer ejemplo, el Presenter
define la interfaz para la 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, la 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?
En el segundo tutorial, el código se cambió a usar una interfaz de Presentador (definida en la vista) para acomodar el uso de UiBinders y genéricos de Java. Creo que la interfaz del presentador se movió a la interfaz de View, ya que ambos comparten el mismo genérico T.
@deepak estas son preocupaciones válidas. Word es infección implementación no definición.
Dejame explicar . En el primer ejemplo, los presentadores mantienen el contrato con lo que la vista debe implementar; en otras palabras, impulsa lo que debería implementarse mediante vistas de un enfoque MVP clásico.
Las cosas se vuelven confusas en el segundo ejemplo. Donde Presenter no tiene control sobre qué vista debe implementar. Esto no es MVP y Google lo llama MVP. No hay manera de que pueda probar las vistas con JRE / pruebas unitarias usando este enfoque. Eso no lo hace malo, ¿no es que MVP y Google no deben llamar a este MVP o deben explicar por qué es un MVP?
@Saket Bansal separando la interfaz no es el enfoque correcto. Conseguirá un código difícil de mantener a medida que la aplicación crezca.
En mi opinión, puedes tomar cualquiera de los dos enfoques, recuerdo que Google dijo algo sobre dónde primero trabajó para ellos para AdWords y segundo para Wave.
De todos modos, también debes ver framworks como GWTP o ERRAI desde jboss