MVVM dla Androida

0

Czy ktoś mógłby mi prosto wyjaśnić na czym polega zworzec MVVM najlepiej z przykładem w Javie (Kotlina dopiero się uczę, słabo znam)? Szukam w internecie to albo przykłady dla Kotlina, albo od razu rozbudowane projekty z Daggerem, Retrofitem, Glidem i nie wiadomo czym jeszcze. Chodzi mi o najprostrzy z możliwych przypadek dla totalnie zielonych.

1

MVVM składa się z modelu, widoku i tzw. view-modelu.

  • Widok - to wiadomo, warstwa prezentacyjna, w skrócie to co widzi użytkownik
  • Model - logika biznesowa i dane aplikacji
  • ViewModel - warstwa, która pośredniczy pomiędzy widokiem a modelem. Udostępnia dane widokowi i jest w stanie skomunikować się z modelem w celu wykonania np. akcji (zapisze coś, usuń, pobierz dane z API etc).

W Androidzie i Architecture Components istnieje klasa ViewModel, która pomaga w implementacji. Dodatkowo stosuje się LiveData, przez które udostępnia się dane z VM do widoku.

https://developer.android.com/topic/libraries/architecture/viewmodel
https://developer.android.com/topic/libraries/architecture/livedata

To tak w skrócie, jeśli masz jakiś konkretny problem to daj znać.

1

Zacznijmy od architektury MVC, jeśli jesteś z nią zaznajomiony to pójdzie łatwo. Dużą słabością tej architektury w rozrastających się aplikacjach jest Controller, ponieważ zaczyna odpowiadać za zbyt dużo rzeczy naraz, co m.in. łamie podstawowe zasady SOLID. Dlatego ktoś pomyślał, żeby rozbić tego masywnego Controllera na ViewModel i ""mniejszego" Controllera. W architekturze MVVM (możesz myśleć na początku MVVMC) ViewModel staje się sercem, który dostarcza nam ,,żywe" dane z Modelu(Database) do Controllera, który staje się ich Obserwatorem i aktywnie reaguje na ich zmianę, zmieniając wygląd widoków zależnych od tych danych. W miarę prosty przykład w Javie możesz znaleźć w pierwszym lepszym filmie na YouTube:

Jeśli miałbym podać prosty przykład. Mamy jakaś bazę danych w która przechowuje ścieżki do plików (stringi) i to jest nasz Model. Naszym View jest jakiś RecyclerView. Tworzymy naszą klasę ViewModel, i mamy w niej jedno pole MutableLiveData<List<Stringi>> paths; i metodę getPaths, która zwraca nam LiveData<List<String>>, czyli nasze pole. Oczywiście te ścieżki pobieramy z Modelu. Pole w klasie jest Mutable, aby można było coś dodawać itp. , natomiast dla Controllera wypluwamy LiveData, czyli taki obiekt, którego Controller sam nie może zmieniać. Dodajemy dodatkowa metodę addPath(String path). Tworzymy teraz klasę Controller czyli np. Fragment i tworzymy w nim instancje klasy ViewModel. Następnie w metodzie np. onActivityCreated zaczynamy obserwować nasze ścieżki viewModel.getPaths.observe(...), dodajemy obsługę RecyclerView i fajrant.

1 użytkowników online, w tym zalogowanych: 0, gości: 1