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.
- Rejestracja:około 5 lat
- Ostatnio:około 3 lata
- Postów:25
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ć.
- Rejestracja:prawie 5 lat
- Ostatnio:ponad 2 lata
- Postów:8
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.