Kodėl talpykla: vienas tiesos šaltinis
Iki šiol meniu ateidavo tik iš tinklo (5 pamoka): atidarai programėlę — matai Loading, lauki atsakymo, ir tik tada picas. Nėra interneto — matai Error, tuščią ekraną. Bet meniu keičiasi retai. Kam kas kartą laukti tinklo?
Pica meniui pridedam talpyklą (cache), kad jis atsidarytų akimirksniu ir veiktų net be ryšio. Idėja — vienas tiesos šaltinis (single source of truth): ekranas visada rodo vietinę talpyklą, o tinklas tik ją atnaujina fone.
Ekranas ──stebi (Flow)──▶ Room talpykla ◀──rašo── refresh() iš GET /menu
- Skaitymas: ekranas prenumeruoja talpyklos
Flow. Yra duomenų — rodo iškart (net be interneto). - Rašymas:
refresh()nueina į serverį, gauna šviežią meniu ir perrašo talpyklą.Flowautomatiškai vėl „iššauna", ir ekranas atsinaujina pats.
Tam naudosim Room — Google ORM biblioteką SQLite duomenų bazei. Trys dalys:
@Entity— Kotlin klasė, atitinkanti DB lentelės eilutę.@Dao— sąsaja su užklausomis (@Query,@Insert), grąžinantiFlow.@Database— sujungia esybes ir DAO į vieną duomenų bazę.
Talpykla įsijungia natūraliai į tai, ką jau turim: MenuRepository iš 5 pamokos paauga (skaito talpyklą, atnaujina iš tinklo), o Room objektai prijungiami per Koiną (6 pamoka) kaip dar keli single.
Verify-docs. Room čia — 2.x versija (
androidx.room2.8.x), NE 3.0. 3.0 keičia KSP/Gradle nustatymus; laikomės 2.x.