Sobes.tech
Middle

Neden @Provides yerine @Binds anotasyonunu kullanmalıyız?

sobes.tech yapay zeka

AI'dan gelen yanıt

@Binds anotasyonu, Dagger'a hangi belirli arayüz uygulamasının, arayüz kendisi talep edildiğinde sağlanması gerektiğini belirtmek için kullanılır.

Bu durumda @Binds kullanmanın @Provides yerine avantajları şunlardır:

  • Performans: @Binds daha verimlidir, çünkü Dagger daha az kod üretir. Sadece arayüzü belirli bir türe bağlar, yeni bir modül örneği oluşturmaz.
  • Okunabilirlik: Kod daha okunaklı hale gelir, çünkü hangi sınıfın hangi arayüzü uyguladığı açıkça görülür.
  • Boilerplate kodun azaltılması: @Binds kullanırken, sadece uygulamayı döndüren ek bir @Provides yöntemi yazmaya gerek yoktur.

Örnek:

Yerine:

@Module
abstract class MyModule { // Modül soyut olmalı

    @Binds
    abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // Yöntem soyut olmalı

}

interface MyInterface {
    // ...
}

class MyInterfaceImpl : MyInterface {
    // ...
}

@Provides anotasyonu, arayüz uygulamaları olmayan veya daha karmaşık nesne oluşturma mantığı gerektiren nesneleri sağlamak için gerekli olmaya devam eder (örneğin, yapıcılar aracılığıyla nesne oluşturma, harici kütüphanelerden nesneler sağlama, yapıcıyla enjekte edilemeyen bağımlılıkları sağlama).