Sobes.tech
Middle+

Koje su mane čuvanja prikaza u prezenteru?

sobes.tech АИ

Одговор од АИ

Čuvanje reference na prikaz (View) u prezenteru (Presenter) u uzorku MVP može dovesti do sledećih nedostataka:

  1. Curenje memorije: Ako je životni ciklus prikaza kraći od životnog ciklusa prezenter-a, i prezenter i dalje drži referencu na uništeni prikaz, dolazi do curenja memorije.
  2. Snažna povezanost: Prezenter postaje čvrsto povezan sa konkretnom implementacijom prikaza, što otežava jedinicno testiranje prezenter-a i njegovo ponovno korišćenje sa različitim prikazima (npr. sa fragmentima i aktivnostima). Krši princip "Separation of Concerns".
  3. Teškoće u testiranju: Za testiranje prezenter-a potrebno je napraviti mock ili lažne implementacije celog interfejsa prikaza, što može biti zamorno i nejasno.
  4. Teškoće sa asinhronim operacijama: Rad sa prikazom nakon završetka asinhrone operacije (npr. mrežnog zahteva) zahteva dodatne provere validnosti prikaza (da li je još uvezen, nije li uništen), što komplikuje kod.

Dobra praksa je koristiti slabe reference (WeakReference) ili eksplicitno odvojiti prikaz od prezenter-a pri uništenju (npr. u onDestroyView za fragmente ili onDestroy za aktivnosti).

// Primer korišćenja slabe reference
private WeakReference<ViewInterface> viewReference;

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

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

// U metodama prezenter-a:
private ViewInterface getView() {
    return viewReference != null ? viewReference.get() : null;
}

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