Middle
Zašto treba koristiti anotaciju @Binds umesto @Provides?
sobes.tech АИ
Одговор од АИ
Napomena @Binds se koristi za označavanje Daggeru koje konkretno implementaciju interfejsa treba da obezbedi kada se traži sama interfejs.
Prednosti korišćenja @Binds umesto @Provides u ovom slučaju su:
- Performanse:
@Bindsje efikasniji jer Dagger generiše manje koda. Jednostavno povezuje interfejs sa konkretnim tipom bez kreiranja novog primera modula. - Čitljivost: Kod postaje jasniji jer je vidljivo koja klasa implementira koji interfejs.
- Smanjenje boilerplate koda: Kada koristite
@Binds, nije potrebno da pišete dodatnu metodu sa@Provideskoja samo vraća instancu implementacije.
Primer:
Umesto:
@Module
class MyModule {
@Provides
fun provideMyInterface(implementation: MyInterfaceImpl): MyInterface {
return implementation;
}
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
Bolje je koristiti:
@Module
abstract class MyModule { // Modul mora biti apstraktan
@Binds
abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // Metod mora biti apstraktan
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
Napomena @Provides ostaje neophodna za obezbeđivanje objekata koji nisu implementacije interfejsa ili zahtevaju složeniju logiku instanciranja (npr. kreiranje objekata putem buildera, obezbeđivanje objekata iz eksternih biblioteka, obezbeđivanje zavisnosti koje ne mogu biti injektovane putem konstruktora).