Sobes.tech
Middle

Kāpēc būtu jāizmanto @Binds anotācija vietā @Provides?

sobes.tech AI

Atbilde no AI

@Binds anotācija tiek izmantota, lai norādītu Dagger, kura konkrētā interfeisa realizācija tam jāsniedz, kad tiek pieprasīts pats interfeiss.

Priekšrocības, izmantojot @Binds vietā @Provides šajā gadījumā:

  • Veiktspēja: @Binds ir efektīvāka, jo Dagger ģenerē mazāk koda. Tas vienkārši sasaista interfeisu ar konkrētu tipu, nesaglabājot jaunu moduļa instanci.
  • Lasāmība: Kods kļūst skaidrāks, jo ir skaidri redzams, kurš interfeiss tiek realizēts ar kādu klasi.
  • Boilerplate koda samazināšana: Izmantojot @Binds, nav nepieciešams rakstīt papildu @Provides metodi, kas vienkārši atgriež realizācijas instanci.

Piemērs:

Vietā:

@Module
class MyModule {

    @Provides
    fun provideMyInterface(implementation: MyInterfaceImpl): MyInterface {
        return implementation;
    }
}

interface MyInterface {
    // ...
}

class MyInterfaceImpl : MyInterface {
    // ...
}

Labāk izmantot:

@Module
abstract class MyModule { // Modulis jābūt abstraktam

    @Binds
    abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // Metode jābūt abstraktai

}

interface MyInterface {
    // ...
}

class MyInterfaceImpl : MyInterface {
    // ...
}

@Provides anotācija joprojām ir nepieciešama, lai nodrošinātu objektus, kas nav interfeisa realizācijas vai prasa sarežģītāku instancēšanas loģiku (piemēram, objektu izveidi ar būvētājiem, ārēju bibliotēku objektu nodrošināšanu, atkarību nodrošināšanu, ko nevar ievadīt caur konstruktoru).