Sobes.tech
Middle

Niyə @Provides əvəzinə @Binds anotasiya istifadə edilməlidir?

sobes.tech Süni İntellekt

AI-dan cavab

@Binds annotasiyası Dagger'a hansı konkret interfeysin tətbiq olunmasını göstərmək üçün istifadə olunur, interfeys özü tələb olunduqda.

Bu halda @Binds istifadə etməyin üstünlükləri @Provides yerinə aşağıdakılardır:

  • Performans: @Binds daha səmərəlidir, çünki Dagger daha az kod yaradır. Sadəcə interfeysi konkret tiplə bağlayır, yeni modul nümunəsi yaratmır.
  • Oxunaqlıq: Kod daha aydın olur, hansı sinfin hansı interfeysi tətbiq etdiyini açıq şəkildə göstərir.
  • Boilerplate kodun azaldılması: @Binds istifadə edərkən, sadəcə tətbiqi qaytaran əlavə @Provides metodu yazmağa ehtiyac yoxdur.

Nümunə:

Əvəzinə:

@Module
abstract class MyModule { // Modul abstrakt olmalıdır

    @Binds
    abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // Metod abstrakt olmalıdır

}

interface MyInterface {
    // ...
}

class MyInterfaceImpl : MyInterface {
    // ...
}

@Provides annotasiyası, interfeys tətbiqləri olmayan və ya daha mürəkkəb instansiya logikası tələb edən obyektləri təmin etmək üçün hələ də lazımdır (məsələn, builder vasitəsilə obyektlərin yaradılması, xarici kitabxanalardan obyektlərin təminatı, konstruktor vasitəsilə in'ektsiya edilə bilməyən asılılıqların təminatı).