Sobes.tech
Middle+

Jaké jsou nevýhody ukládání pohledu v prezenterovi?

sobes.tech AI

Odpověď od AI

Udržování odkazu na pohled (View) v prezenterovi (Presenter) v vzoru MVP může vést k následujícím nevýhodám:

  1. Únik paměti: Pokud je životní cyklus pohledu kratší než životní cyklus prezenteru a prezenter stále drží odkaz na zničený pohled, dochází k úniku paměti.
  2. Silné propojení: Prezenter se stává úzce propojený s konkrétní implementací pohledu, což ztěžuje jednotkové testování prezenteru a jeho opětovné použití s různými pohledy (například s fragmenty a aktivitami). Porušuje princip "Separation of Concerns".
  3. Obtížnost testování: Pro testování prezenteru je nutné vytvářet mocky nebo fiktivní implementace celého rozhraní pohledu, což může být komplikované a nejasné.
  4. Obtížnost s asynchronními operacemi: Práce s pohledem po dokončení asynchronní operace (například síťové žádosti) vyžaduje dodatečné kontroly platnosti pohledu (je stále připojen, nebyl zničen), což komplikuje kód.

Dobrá praxe je používat slabé odkazy (WeakReference) nebo explicitně odpojit pohled od prezenteru při zničení (například v onDestroyView pro fragmenty nebo onDestroy pro aktivity).

// Příklad použití slabého odkazu
private WeakReference<ViewInterface> viewReference;

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

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

// V metodách prezenteru:
private ViewInterface getView() {
    return viewReference != null ? viewReference.get() : null;
}

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