Sobes.tech
Junior — Middle

Dependency injection ან მოდულური სისტემების კონტექსტში 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 გამოიყენება, როდესაც საჭიროა ობიექტის შექმნის ლოგიკა.