Sobes.tech
Middle+

What are the disadvantages of storing the view in the presenter?

sobes.tech AI

Answer from AI

Storing a reference to the View in the Presenter in the MVP pattern can lead to the following disadvantages:

  1. Memory leaks: If the lifecycle of the view is shorter than that of the presenter, and the presenter continues to hold a reference to the destroyed view, it results in a memory leak.
  2. Tight coupling: The presenter becomes closely coupled with a specific implementation of the view, which complicates unit testing of the presenter and reusing it with different views (e.g., with a fragment and an activity). The "Separation of Concerns" principle is violated.
  3. Testing complexity: Testing the presenter requires mocking or creating dummy implementations of the entire view interface, which can be cumbersome and non-obvious.
  4. Difficulty with asynchronous operations: Working with the view after completing an asynchronous operation (e.g., a network request) requires additional checks for the validity of the view (whether it is attached to the window, not destroyed), which complicates the code.

A good practice is to use weak references (WeakReference) or explicitly detach the view from the presenter upon destruction (e.g., in onDestroyView for fragments or onDestroy for activities).

// Example of using a weak reference
private WeakReference<ViewInterface> viewReference;

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

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

// In presenter methods:
private ViewInterface getView() {
    return viewReference != null ? viewReference.get() : null;
}

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