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:
- 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.
- 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".
- 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.
- 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);
}
}