Sukurk CoreModule.kt — tinklo grafas viename modulyje
Kodo stulpelyje — core/di/CoreModule.kt. Tai tas pats tinklas, kurį 5 pamokoje statei rankomis (object Network), tik dabar aprašytas kaip Koin receptai. single<Retrofit> naudoja get<Json>() — Koin pats paduoda anksčiau aprašytą Json. single<PicaApi> prašo get<Retrofit>(). Grafas surenkamas pats.
Dabar — funkcijų moduliai. Kiekviena funkcija (menu, cart) turi savo modulį šalia savo kodo.
// feature/menu/di/MenuModule.kt
val menuModule = module {
single { MenuRepository(get()) } // get() = PicaApi (iš coreModule)
viewModel { MenuViewModel(get()) } // get() = MenuRepository
}
// feature/cart/di/CartModule.kt — krepšelis kol kas tas pats „in-memory" MVI iš 3 pamokos
val cartModule = module {
viewModel { CartViewModel() } // priklausomybių dar neturi;
// OrderRepository/TableSession prisidės 9/10 pamokose
}
Atkreipk dėmesį: MenuViewModel nepasikeitė — jis kaip ir anksčiau priima MenuRepository konstruktoriuje. Pasikeitė tik tai, kas jį pastato: nebe tu ranka, o Koinas per get().
Patarimas.
singlevsfactory:Retrofit,PicaApi, repozitorijos — tegul būnasingle(viena kopija visai programai; brangu kurti iš naujo). ViewModel visadaviewModel { }— jį valdo ekrano gyvavimo ciklas.