Middle
Неге @Provides ордуна @Binds белгилөөсүн колдонуш керек?
sobes.tech AI
AIден жооп
@Binds annotations Dagger-ге көрсөтүү үчүн колдонулат, кайсы конкреттүү интерфейс ишке ашырылышы керек, ал суралган учурда.
Бул учурда @Binds колдонуу артыкчылыктары @Provides ордуна:
- Өндүрүмдүүлүк:
@Bindsкөбүрөөк натыйжалуу, анткени Dagger аз код чыгарат. Ал интерфейсти конкреттүү түр менен жөнөкөй байланыштырат, жаңы модуль мисалын түзбөй. - Окуулушу: Код такыр түшүнүктүү болот, анткени кайсы класс кайсы интерфейсти ишке ашырат, ачык көрүнөт.
- Boilerplate кодду кыскартуу:
@Bindsколдонуу менен, кошумча@Providesметоду жазуу керек эмес, ал жөн гана ишке ашырылыштын мисалын кайтарат.
Мисал:
Анын ордуна:
@Module
class MyModule {
@Provides
fun provideMyInterface(implementation: MyInterfaceImpl): MyInterface {
return implementation;
}
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
Жакшысы колдонуу:
@Module
abstract class MyModule { // Модуль абстракт болушу керек
@Binds
abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // Методу абстракт кылуу керек
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
@Provides белгиси дагы эле керек, ал объекттерди камсыздоо үчүн, алар интерфейс ишке ашырмалары эмес же түзүү логикасы татаал объекттер үчүн (мисалы, куруучулар аркылуу объекттерди түзүү, тышкы китепканалардан объекттерди берүү, куруучудан өтпөй инъекция жасай албаган көзкарандылыктарды берүү).