📖 Teorija
Namų darbas — kodėl DI (pakeisk fake repo)
Namų darbas — pajusk, kodėl DI verta.
- Perkelk viską į Koiną. Įsitikink, kad
object Networkištrintas, oMenuScreennaudojakoinViewModel(). Meniu turi krautis kaip anksčiau. - Pridėk
factoryvssingleeksperimentą. Laikinai pakeisksingle { MenuRepository(get()) }įfactory { ... }ir per Logcat (arprintlnkonstruktoriuje) pažiūrėk, kiek kartų repozitorija sukuriama.single— vieną kartą;factory— kiekvienam prašymui. - 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.