Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 6 / 14 Koin priklausomybių injekcija ~45 min
📖 Teorija

Namų darbas — kodėl DI (pakeisk fake repo)

Namų darbas — pajusk, kodėl DI verta.

  1. Perkelk viską į Koiną. Įsitikink, kad object Network ištrintas, o MenuScreen naudoja koinViewModel(). Meniu turi krautis kaip anksčiau.
  2. Pridėk factory vs single eksperimentą. Laikinai pakeisk single { MenuRepository(get()) } į factory { ... } ir per Logcat (ar println konstruktoriuje) pažiūrėk, kiek kartų repozitorija sukuriama. single — vieną kartą; factory — kiekvienam prašymui.
  3. DI nauda testuose (svarbiausia dalis). Testui nereikia tikro tinklo. Su DI gali paduoti netikrą repozitoriją:
class FakeMenuRepository : MenuRepository(FakeApi()) {
    override suspend fun getMenu() = listOf(MenuItem(1, "Test pica", "…", 8.5, "pizza", null))
}

// teste:
startKoin { modules(module { viewModel { MenuViewModel(FakeMenuRepository()) } }) }

Be DI MenuViewModel pats kurtų Network.api — ir testas visada eitų į tinklą. Su DI priklausomybę pakeiti viena eilute. Tai ir yra DI esmė: ne „gražesnis kodas", o galimybė pakeisti priklausomybes — testuose, skirtinguose build'uose, dev vs prod.

Atsiskaitymui: (1) ekranas su meniu (per Koiną), (2) Logcat eilutė [Koin] started with N definitions.

Toliau. Grafas paruoštas ir švarus. 7 pamokoje pridėsim Room talpyklą — tai bus tiesiog dar vienas single { } moduliuose, ir meniu ims veikti net be interneto. DI dabar leidžia augti neskausmingai.