Middle
რატომ უნდა გამოიყენოთ @Binds ანოტაცია @Provides-ის ნაცვლად?
sobes.tech AI
პასუხი AI-სგან
@Binds ნიშანი გამოიყენება იმისთვის, რომ Dagger-ს მიუთითოს, რომელი კონკრეტული ინტერფეისი უნდა მიაწოდოს, როდესაც მოთხოვნა თავად ინტერფეისზეა.
ამ შემთხვევაში @Binds-ის გამოყენების უპირატესობები @Provides-ის ნაცვლად არის:
- პროდუქტიულობა:
@Bindsუფრო ეფექტურია, რადგან Dagger ნაკლებ კოდს ქმნის. ის უბრალოდ აკავშირებს ინტერფეისს კონკრეტულ ტიპთან, ახალი მოდულის მაგალითის შექმნის გარეშე. - კითხულობა: კოდი უფრო ნათელია, რადგან აშკარად ჩანს, რომელი კლასი რა ინტერფეისს ახორციელებს.
- Boilerplate კოდის შემცირება:
@Binds-ის გამოყენებისას, დამატებითი@Providesმეთოდი საჭირო არ არის, რომელიც უბრალოდ აბრუნებს იმპლემენტაციის მაგალითს.
მაგალითი:
სანაცვლოდ:
@Module
class MyModule {
@Provides
fun provideMyInterface(implementation: MyInterfaceImpl): MyInterface {
return implementation;
}
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
მჯობია გამოიყენოს:
@Module
abstract class MyModule { // მოდული უნდა იყოს აბსტრაქტული
@Binds
abstract fun bindMyInterface(implementation: MyInterfaceImpl): MyInterface; // მეთოდი უნდა იყოს აბსტრაქტული
}
interface MyInterface {
// ...
}
class MyInterfaceImpl : MyInterface {
// ...
}
@Provides ნიშანი კვლავაც საჭიროა ობიექტების მიწოდებისთვის, რომლებიც არ არის ინტერფეისების რეალიზაციები ან საჭიროებენ უფრო რთულ ინსტანცირებას (მაგალითად, ობიექტების შექმნა ბილდერების საშუალებით, ობიექტების მიწოდება მესამე ბიბლიოთეკებიდან, დამოკიდებულებების მიწოდება, რომლებიც ვერ ინექცირებით შეიძლება).