MVP :La vue doit-elle implémenter l'interface d'un présentateur ou vice versa ?

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

  •  27-09-2020
  •  | 
  •  

Question

Je fais mes premiers pas avec GWT.J'ai une question après lecture :

Dans le premier exemple, le Presenter définit l'interface pour le 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();
  }
}

Et dans le second, le View définit l'interface pour le 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();
}

Quelle est l'idée de cette différence ?

Lequel devrais-je choisir?

Était-ce utile?

La solution

Je pense que vous auriez dû utiliser le mot « définit » dans votre question au lieu de « met en œuvre » et si tel est le cas, alors peu importe la classe qui définit l'interface.

Vous pouvez faire quelque chose de différent en définissant les interfaces dans ses propres fichiers.En fin de compte, tout ce qui compte, c'est le présentateur implémentant l'interface Presenter et la vue implémentant l'interface View.

Autres conseils

@deepak, ce sont des préoccupations valables.Word infecte la mise en œuvre et non la définition.

Laisse-moi expliquer .Dans le premier exemple, les présentateurs détiennent le contrat sur ce que la vue doit implémenter, en d'autres termes, détermine ce qui doit être implémenté par les vues, une approche MVP classique.

Les choses deviennent confuses dans le deuxième exemple.Où Presenter n'a aucun contrôle sur la vue qui doit être implémentée.Ce n'est pas MVP et Google l'appelle MVP.Il n'est pas possible de tester les vues avec des tests JRE/unitaires en utilisant cette approche.Cela ne rend pas les choses mauvaises, mais ce n'est pas MVP et Google ne devrait pas appeler ce MVP ou doit-il expliquer pourquoi est-ce un MVP ?

@Saket Bansal séparer l'interface n'est pas une approche correcte.Cela entraînera des difficultés à maintenir le code à mesure que l'application se développe.

À mon avis, vous pouvez adopter l'une ou l'autre approche, je me souviens que Google avait dit que la première fonctionnait pour eux pour AdWords et la seconde pour Wave.

Quoi qu'il en soit, vous devriez également examiner des cadres comme GWTP ou ERRA de jboss

Dans le deuxième didacticiel, le code a été modifié pour utiliser une interface Presenter (définie dans la vue) pour s'adapter à l'utilisation des génériques UiBinders et Java.Je pense que l'interface Presenter a été déplacée vers l'interface View car elles partagent toutes deux le même T générique.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top