Definicja #
MVVM (Model-View-ViewModel) to wzorzec architektoniczny opracowany przez Microsofta dla platformy WPF (Windows Presentation Foundation), powszechnie stosowany w aplikacjach mobilnych i desktopowych. Dzieli aplikację na trzy warstwy:
- Model — dane i logika biznesowa: encje domenowe, repozytoria, serwisy pobierające dane z API lub bazy danych
- View — warstwa UI: XAML w WPF/MAUI, XML w Android, SwiftUI w iOS — odpowiedzialna wyłącznie za prezentację
- ViewModel — pośrednik między Modelem a Widokiem: udostępnia właściwości i komendy, implementuje INotifyPropertyChanged (lub Observable w Android/iOS), bez bezpośrednich referencji do View
Kluczowy mechanizm MVVM to data binding — automatyczna synchronizacja wartości między właściwościami ViewModelu a elementami UI bez kodu w code-behind. W WPF/MAUI jest to wbudowany mechanizm XAML, w Android używa się Jetpack Data Binding lub StateFlow, w iOS Combine lub ObservableObject (SwiftUI).
MVVM jest implementowany przez frameworki: MVVM Community Toolkit (.NET), Prism (WPF/MAUI), MvvmCross (cross-platform Xamarin), Android Architecture Components (ViewModel, LiveData, StateFlow). Wzorzec pozwala testować logikę ViewModelu bez instancji UI.
Zastosowania #
- Aplikacje WPF i .NET MAUI — separation of concerns przez data binding XAML z ViewModelem implementującym INotifyPropertyChanged
- Android — ViewModel z Jetpack z StateFlow/LiveData do reactive UI i przeżywania rotation changes
- SwiftUI i UIKit (iOS) — ObservableObject i @Published do reaktywnego wiązania danych z widokami
- Testowanie jednostkowe logiki UI — ViewModel jest czystą klasą C#/Kotlin/Swift testowalną bez emulatora
- Xamarin.Forms i MAUI — cross-platform aplikacje mobilne z wspólnym ViewModelem dla iOS i Android
Ścieżka nauki #
Nauka MVVM jest najłatwiejsza w kontekście konkretnej technologii. Dla .NET wybierz WPF lub MAUI i poznaj data binding XAML, INotifyPropertyChanged i Commands (ICommand). Microsoft Learn (learn.microsoft.com) i dokumentacja .NET MAUI są doskonałymi zasobami, jak i MVVM Community Toolkit (simplyfikuje boilerplate przez source generators).
Dla Android: oficjalny Guide to App Architecture (developer.android.com/topic/architecture) opisuje MVVM z Jetpack ViewModel, Repository i StateFlow. Kurs "Android Basics with Compose" od Google wprowadza MVVM przez nowoczesne narzędzia.
Kluczowe koncepcje do opanowania: reactive programming (StateFlow, LiveData, Combine), Command pattern (ICommand, RelayCommand), Dependency Injection (dla ViewModeli) i nawigacja (Navigation Component, AppNavigator). Testy jednostkowe ViewModelu bez UI to jeden z głównych benefitów wzorca — koniecznie praktykuj. Znajomość MVVM jest wymagana na większości stanowisk mobile i desktop developer .NET.