Sobes.tech
Middle+

Quais são as desvantagens de guardar a vista no apresentador?

sobes.tech IA

Resposta da IA

Manter uma referência à vista (View) no apresentador (Presenter) no padrão MVP pode levar às seguintes desvantagens:

  1. Fugas de memória: Se o ciclo de vida da vista for mais curto do que o do apresentador, e este continuar a manter uma referência à vista destruída, isso leva a uma fuga de memória.
  2. Acoplamento forte: O apresentador torna-se fortemente acoplado a uma implementação concreta da vista, dificultando os testes unitários do apresentador e a sua reutilização com diferentes vistas (por exemplo, com fragmentos e atividades). Viola o princípio de "Separação de Responsabilidades".
  3. Dificuldade nos testes: Para testar o apresentador, é necessário fazer mocks ou criar implementações fictícias de toda a interface da vista, o que pode ser trabalhoso e pouco claro.
  4. Dificuldade com operações assíncronas: Trabalhar com a vista após a conclusão de uma operação assíncrona (por exemplo, uma requisição de rede) requer verificações adicionais da validade da vista (se está anexada à janela, se não foi destruída), o que complica o código.

Uma boa prática é usar referências fracas (WeakReference) ou desvincular explicitamente a vista do apresentador ao destruí-la (por exemplo, em onDestroyView para fragmentos ou onDestroy para atividades).

// Exemplo de uso de referência fraca
private WeakReference<ViewInterface> viewReference;

public void attachView(ViewInterface view) {
    viewReference = new WeakReference<>(view);
}

public void detachView() {
    if (viewReference != null) {
        viewReference.clear();
        viewReference = null;
    }
}

// Nos métodos do apresentador:
private ViewInterface getView() {
    return viewReference != null ? viewReference.get() : null;
}

public void updateData(String data) {
    ViewInterface view = getView();
    if (view != null) {
        view.showData(data);
    }
}