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