📖 Teorija
Ką pastatei — Pica architektūros stuburas
Sveikinu — pastatei pilną, į gamybą panašią programėlę. Prieš sujungdami viską, pažiūrėk į tai, ką sukūrei. Pica nėra atsitiktinis ekranų rinkinys — tai sluoksniuota architektūra, kur kiekviena pamoka pridėjo vieną sluoksnį:
┌─────────────────────────────────────────────┐
│ UI (Compose) MenuScreen, CartScreen, │ ← 2, 3, 4
│ LoginScreen, ScanScreen │
├─────────────────────────────────────────────┤
│ Presentation ViewModel + Event + │ ← 3 (MVI)
│ (MVI) UiState (StateFlow) │
├─────────────────────────────────────────────┤
│ Domain MenuItem, CartItem, │
│ Order │
├─────────────────────────────────────────────┤
│ Data (repository) MenuRepository, │ ← 5, 7, 8a, 9
│ AuthRepository, Order... │
├──────────────┬──────────────┬────────────────┤
│ Network │ Cache │ Auth │
│ Retrofit(5) │ Room(7) │ Token(8a) │
│ Interceptor │ │ Stripe(11) │
│ (9) │ │ QR(10) │
└──────────────┴──────────────┴────────────────┘
Viską sujungia: Koin DI (6)
Kiekviena pamoka → vienas sluoksnis ar galimybė:
| Pamoka | Ką pridėjo |
|---|---|
| 1–2 | Compose UI, statinis meniu |
| 3 | MVI būsena (krepšelis) |
| 4 | Navigacija (Nav3) |
| 5 | Retrofit — meniu iš serverio |
| 6 | Koin DI — sutvarko jungimą |
| 7 | Room talpykla — meniu offline |
| 8a | Autentifikacija — sesijos raktas |
| 9 | Autentifikuotos užklausos — užsakymai |
| 10 | QR — staliuko kontekstas |
| 11 | Stripe — apmokėjimas |
| 12 | Išleidimas — pasirašymas, R8 |
Svarbiausia — kryptys: UI priklauso nuo presentation, presentation nuo data, data nuo tinklo/talpyklos. Niekada atvirkščiai. Todėl gali pakeisti Retrofit kitu klientu ar Room kita talpykla, ir UI net nesužinos. Būtent tai ir yra „gera architektūra" — ne dėl grožio, o dėl atsparumo pokyčiams.