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 նշումը մնում է անհրաժեշտ՝ այն օբյեկտները տրամադրելու համար, որոնք չեն ինտերֆեյսների իրագործումներ կամ պահանջում են ավելի բարդ ինստանցիացման լոգիկա (օրինակ՝ օբյեկտների ստեղծում բիլդերների միջոցով, արտաքին գրադարաններից օբյեկտների տրամադրում, կախվածություններ տրամադրելու համար, որոնք չեն կարող ներմուծվել կոնստրուկտորով):