Middle+
Millised on vaate salvestamise puudused esinejas?
sobes.tech AI
Vastus AI-lt
MVP-mudelis (Model-View-Presenter) võib vaate (View) viite säilitamine esitlejas (Presenter) põhjustada järgmisi puudusi:
- Mälu lekked: Kui vaate elutsükkel on lühem kui esitleja oma, ja esitleja jätkab viite hoidmist kustutatud vaatele, põhjustab see mälu lekked.
- Tihe seotus: Esitleja muutub tihedalt seotud konkreetse vaate teostusega, mis raskendab üksustest testimist ja selle taaskasutamist erinevate vaadetega (näiteks fragment ja aktiivsus). Rikkub "Separation of Concerns" põhimõtet.
- Testimise keerukus: Esitleja testimiseks tuleb seda mokida või luua fiktiivseid kogu vaate liidese teostusi, mis võib olla tülikas ja ebaselge.
- Asünkroonsete operatsioonide keerukus: Töötamine vaatega pärast asünkroonse operatsiooni (näiteks võrgupäring) lõppu nõuab täiendavaid kontrollimisi vaate kehtivuse kohta (kas see on ühendatud aknaga, kas see pole kustutatud), mis muudab koodi keerulisemaks.
Hea tava on kasutada nõrku viiteid (WeakReference) või selgelt lahti ühendada vaade esitlejast selle hävitamisel (näiteks onDestroyView fragmentides või onDestroy aktiivsustes).
// Nõrga viite kasutamise näide
private WeakReference<ViewInterface> viewReference;
public void attachView(ViewInterface view) {
viewReference = new WeakReference<>(view);
}
public void detachView() {
if (viewReference != null) {
viewReference.clear();
viewReference = null;
}
}
// Esitleja meetodites:
private ViewInterface getView() {
return viewReference != null ? viewReference.get() : null;
}
public void updateData(String data) {
ViewInterface view = getView();
if (view != null) {
view.showData(data);
}
}