Pergunta

Estou dando meus primeiros passos com GWT.Eu tenho uma pergunta depois de ler:

No primeiro exemplo o Presenter define a interface para o 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();
  }
}

E no segundo, o View define a interface para o 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();
}

Qual é a ideia dessa diferença?

Qual devo escolher?

Foi útil?

Solução

Eu acho que você deveria ter usado a palavra 'define' em sua pergunta em vez de 'implementa' e se for esse o caso, então não importa qual classe define a interface.

Você poderia fazer algo diferente definindo as interfaces em seus próprios arquivos.No final das contas, tudo o que importa é o Presenter implementando a interface do Presenter e o View implementando a interface do View.

Outras dicas

@deepak, essas são preocupações válidas.Word é implementação de infecção, não definição.

Deixe-me explicar .No primeiro exemplo, os apresentadores mantêm o contrato com o que a visão deve implementar, em outras palavras, orienta o que deve ser implementado pelas visualizações, uma abordagem clássica de MVP.

As coisas ficam confusas no segundo exemplo.Onde o Presenter não tem controle sobre qual visão deve ser implementada.Isso não é MVP e o Google está chamando isso de MVP.Não há como testar as visualizações com testes de unidade/JRE usando essa abordagem.Isso não significa que seja ruim, mas não é MVP e o Google não deveria chamar isso de MVP ou eles devem explicar por que é um MVP?

@Saket Bansal separar a interface não é a abordagem correta.Isso resultará em dificuldade de manutenção do código à medida que o aplicativo cresce.

Na minha opinião, você pode adotar qualquer uma das abordagens, lembro-me do Google dizendo alguns onde o primeiro funcionou para eles para o AdWords e o segundo para o Wave.

De qualquer forma, você também deve olhar para estruturas como GWTP ou ERRAI do jboss

No segundo tutorial o código foi alterado para usar uma interface Presenter (definida na view) para acomodar o uso de UiBinders e genéricos Java.Acho que a interface do Presenter foi movida para a interface View, pois ambas compartilham o mesmo T. genérico.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top