Sobes.tech
Junior — Middle

Тәуелділікті енгізу немесе модульдік жүйелер контекстінде 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 — объектіні құру логикасы қажет болғанда.