Sobes.tech
Junior — Middle

Ποια είναι η διαφορά μεταξύ του μηχανισμού Binds και Provides στο πλαίσιο της εισαγωγής εξαρτήσεων ή συστημάτων modular;

sobes.tech AI

Απάντηση από AI

Στο πλαίσιο της εξάρτησης εισαγωγής (π.χ., Dagger στο Android), οι σημάνσεις @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 χρησιμοποιείται όταν απαιτείται λογική δημιουργίας του αντικειμένου.