Sobes.tech
Junior — Middle

Mis vahe on mehhanismide Binds ja Provides vahel sõltuvuste süstimise või moodulite süsteemide kontekstis?

sobes.tech AI

Vastus AI-lt

Kontekstis sõltuvuste süstimise (näiteks Android Daggeriga) annotatsioonid @Provides ja @Binds teenivad erinevaid eesmärke, kuigi mõlemad kasutatakse sõltuvuste pakkumiseks.

  • @Provides kasutatakse meetodite jaoks, mis loovad ja tagastavad konkreetse objekti näidise. Tavaliselt on see meetod kehas, kuhu saab kirjutada objekti loomise loogika.

  • @Binds rakendub liidese sidumiseks selle rakendusega ilma uue näidise loomata. Meetod @Binds-iga peab olema abstraktne ja lihtsalt tagastama liidese rakenduse, mis antakse parameetrina.

Näide:

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

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

Seega on @Binds tõhusam ja lihtsam, kui soovite lihtsalt näidata, et liides on rakendatud konkreetse klassiga, samas kui @Provides on kasulik, kui vaja on objekti loomise loogikat.