Sobes.tech
Junior — Middle

Dependency injection же модулдук системалар контекстинде Binds жана Provides механизминин айырмасы эмнеде?

sobes.tech AI

AIден жооп

Талдоо контекстинде (мисалы, Androidда Dagger менен) @Provides жана @Binds белгилери ар башка максаттар үчүн кызмат кылат, бирок экөө тең көзкарандылыктарды камсыз кылуу үчүн колдонулат.

  • @Provides конкреттүү объекттин үлгүсүн түзүп, кайтаратган ыкмалар үчүн колдонулат. Адатта, бул ыкма денеси бар жана анда объект түзүү логикасын жазса болот.

  • @Binds интерфейсти анын ишке ашырылышы менен байланыштыруу үчүн колдонулат, жаңы үлгү түзбөстөн. @Binds менен белгиленген ыкма абстракттуу болушу керек жана параметр катары берилген интерфейс ишке ашырылышын жөн гана кайтаруу керек.

Мисал:

@Module
abstract class NetworkModule {
    @Binds
    abstract fun bindApiService(impl: ApiServiceImpl): ApiService
}

@Module
class DatabaseModule {
    @Provides
    fun provideDatabase(): Database {
        return DatabaseImpl()
    }
}

Ошентип, @Binds натыйжалуу жана жөнөкөй, эгер сиз жөн гана интерфейс конкреттүү класс тарабынан ишке ашырылат деп көрсөтүүнү кааласаңыз, ал эми @Provides объект түзүү логикасы керек болгондо колдонулат.