Middle+
Aké sú nevýhody uloženia pohľadu v prezenterovi?
sobes.tech AI
Odpoveď od AI
Udržiavanie odkazu na pohľad (View) v prezenterovi (Presenter) v vzore MVP môže viesť k nasledujúcim nevýhodám:
- Únik pamäte: Ak je životný cyklus pohľadu kratší ako životný cyklus prezenteru a ten stále drží odkaz na zničený pohľad, dochádza k úniku pamäte.
- Silná väzba: Prezenter sa stáva tesne spojený s konkrétnou implementáciou pohľadu, čo sťažuje jednotkové testovanie prezenteru a jeho opätovné použitie s rôznymi pohľadmi (napríklad s fragmentmi a aktivitami). Porušuje princíp "Separation of Concerns".
- Ťažkosti pri testovaní: Na testovanie prezenteru je potrebné vytvoriť mocky alebo falošné implementácie celého rozhrania pohľadu, čo môže byť náročné a nejasné.
- Ťažkosti s asynchrónnymi operáciami: Práca s pohľadom po dokončení asynchrónnej operácie (napríklad sieťovej požiadavky) vyžaduje dodatočné kontroly platnosti pohľadu (či je ešte pripojený, či nebol zničený), čo komplikuje kód.
Dobrá prax je používať slabé odkazy (WeakReference) alebo explicitne odpojiť pohľad od prezenteru pri zničení (napríklad v onDestroyView pre fragmenty alebo onDestroy pre aktivity).
// Príklad použitia 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 metódach prezenteru:
private ViewInterface getView() {
return viewReference != null ? viewReference.get() : null;
}
public void updateData(String data) {
ViewInterface view = getView();
if (view != null) {
view.showData(data);
}
}