Design-Frage zu MVP

  • Antworten:4
  • OffenNicht stickyBentwortet
  • Forum-Beiträge: 3

07.08.2021, 13:49:09 via Website

Hi,
Ihr nutzt doch bestimmt auch das ViewModel in Android.
Ich hab dazu eine prinzipielle Frage….
Wenn ich z.b. eine Notiz-App machen möchte, angefangen mit einer Pojo „Notiz“.

Methoden wie Notiz hinzufügen, löschen, anzeigen usw. kommen in eine eigene Klasse, sagen wir „NotizenDAO“ auf die ich dann über ein Interface vom Fragment/Activity bzw. Presenter zugreife.
Aber wo liegt dann die eigentliche Liste der Notizen? Um LifecycleAware zu sein, sollte sie ja im ViewModel liegen. Aber dann müsste ja NotizenDAO im ViewModel die Liste aktuell halten - was aber schlecht geht, da NotizenDAO als einfache Klasse nicht LifecycleAware ist und dementsprechend keinen direkten Zugriff auf ViewModel hat.
Auf NotizenDAO zu verzichten und alle Methoden direkt im ViewModel zu machen ist natürlich möglich, finde ich aber häßlich.
Thx
Michael

Diskutiere mit!
Beste Antwort
  • Forum-Beiträge: 11.221

07.08.2021, 16:08:01 via Website

Hallo Michael,

du hast Recht, die Liste müsste im ViewModel liegen. Da man das aber, wie du auch richtig erkannt hast, nicht macht, packt man ein DataAccess Layer dazwischen z.b. via Repository Pattern.
Deine Zugriffe aus der Activity gehen dann nur übers ViewModel, dein ViewModel geht gegen das Repository und das speichert die Daten irgendwo ab.
Hier mal gut zum durchlesen:
https://www.toptal.com/android/android-apps-mvvm-with-clean-architecture

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 3

08.08.2021, 20:19:30 via Website

Hallo Pascal,
dann redest du von MVVM und die BusinessLogik ist komplett im ViewModel wenn ich das richtig verstehe. Nutzt du dann pro Fragment ein ViewModel?
Und wenn ja, wie kommst du dann bei einem anderen Fragment an die Liste (vom Notiz-Beispiel) im ViewModel vom vorherigen Fragment? Vorher speichern und dann neu Laden, oder wie?
Gruß
Michael

Hilfreich?
Diskutiere mit!
  • Forum-Beiträge: 11.221

10.08.2021, 17:13:56 via Website

Hallo Michael,

ja, dann müsstest du das immer in deine Datenhaltung abspeichern und wieder neu lesen.
Alternativ kannst du das natürlich auch zwischen Activities oder Fragments als Bundle übergeben, das macht aber nur das Pattern kaputt. Je nach dem was bei dir für eine Datenhaltung hinten dran hängt, im Repository speichern und wieder lesen. Solange das lokal auf dem Gerät passiert, düfte das auch kaum Zeit benötigen.
Wenn du aber jetzt speichern z.b. WebRequests machen müsstest, würde ich die Daten cachen.
Ich hab das bisher aber auch nie wirklich sauber aufgesetzt. Vlt. findest du ja ein gutes Beispiel bei GitHub.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Diskutiere mit!