Kotlin Multiplatform Patterns: Više od MVVM-a
Kotlin Multiplatform (KMP) omogućuje dijeljenje poslovne logike između Androida i iOS-a, ali pravo pitanje je: kako organizirati taj shared code?
Jedan od najčešćih pristupa je MVVM (Model–View–ViewModel).
MVVM kao dobra početna točka
U KMP projektu ViewModel može sadržavati većinu business logike, dok UI ostaje platform-specific ili se dijeli kroz Compose Multiplatform.
Tipičan flow izgleda ovako:
UI → ViewModel → Use Case → Repository → Data Source
ViewModel izlaže stanje kroz StateFlow, a UI reagira na promjene statea. Time dobivamo jasni separation of concerns i lakše testiranje.
Repository Pattern
Repository Pattern skriva detalje o tome odakle podaci dolaze.
ViewModel ne mora znati koristi li aplikacija REST API, lokalnu bazu ili Supabase.
ViewModel
↓
Repository
↓
API / Database / Cache
To je posebno korisno u KMP-u jer se repository i većina data layera mogu držati u commonMain.
Use Case Pattern
Kod većih aplikacija Use Case dodatno odvaja business logic od ViewModela.
Primjer:
LoginViewModel
↓
LoginUseCase
↓
AuthRepository
ViewModel tada ostaje jednostavan i fokusiran na UI state.
Shared-first pristup
Kod KMP-a vrijedi jednostavno pravilo:
Write once, share as much as possible.
Business logic, networking, database, repositories i use cases mogu biti shared, dok se samo platform-specific stvari rješavaju kroz expect/actual ili native implementacije.
MVVM zato nije cilj sam po sebi. To je samo jedan od patterna koji pomaže da KMP projekt ostane modularan, lakši za testiranje i održavanje.
KMP + MVVM + Repository + Use Case + StateFlow čini vrlo dobar temelj za moderne Android/iOS aplikacije.



