You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Le choix a ultimement assez peu de conséquences étant donné la taille du projet, donc plutôt basse priorité
Pros & Cons
Dagger/Hilt (wrapper Hilt autour de Dagger 2 pour reduire le boilerplate)
Pros
Fait pour Android donc adapté au projet
Compilé
plus performant, mais certainement un impact négligeable pour notre app
Solution de DI officielle Google
Rapide à mettre en place grâce aux annotations
Error handling au moment de la compilation -> Moins de risque d'erreur
Cons
Fait pour Android donc plus couplé à cet environnement (peut être moins flexible pour les tests, etc)
Compilé
plus longs temps de Build
génération de code
Koin
Pros
Utilise beaucoup des feature Kotlin
Pas spécifique à android
Meilleur pour les tests
Injection Runtime
Moins de temps de compilation
Setup initial facile, peu de boilerplate
Cons
Runtime errors
Beaucoup d'erreurs qui auraient été trouvées de manière statique vont compiler sans problème -> Plus longues itérations
Manuelle
Pros
Pas de dépendance sur une librairie
Grande flexibilité
Tout est dans notre codebase
N'herite pas de la complexité d'une librairie
Aussi complexe qu'on en a besoin
Cons
N'herite pas de la complexité d'une librairie
Il faut coder les nouvelles feature
Bien plus de boilerplate
Examples de la syntaxe
Dagger/Hilt
// Application.kt
@HiltAndroidApp
classExampleApplication : Application() { ... }
// .......// Activity.kt
@AndroidEntryPoint
classExampleActivity : AppCompatActivity() { ... }
// ......// constructor of a class with IOCclassAnalyticsAdapter @Inject constructor(
privatevalservice:AnalyticsService
) { ... }
// module with interface injection
@Module
@InstallIn(ActivityComponent::class)
abstractclassAnalyticsModule {
@Binds
abstractfunbindAnalyticsService(
analyticsServiceImpl:AnalyticsServiceImpl
): AnalyticsService
}
// module with instance injection
@Module
@InstallIn(ActivityComponent::class)
object AnalyticsModule {
@Provides
funprovideAnalyticsService(
// Potential dependencies of this type
): AnalyticsService {
returnRetrofit.Builder()
.baseUrl("https://example.com")
.build()
.create(AnalyticsService::class.java)
}
}
Koin
// ModuleclassMyService()
classController()
val myModule = module {
// declare single instance for MyService class
single { MyService() }
// declare factory instance for Controller class
factory { Controller() }
}
//......// Dependency resolution// Presenter <- ServiceclassService()
classController(valview:View)
val myModule = module {
// declare Service as single instance
single { Service() }
// declare Controller as single instance, resolving View instance with get()
single { Controller(get()) }
}
Pour moi il y a 3 options
Le choix a ultimement assez peu de conséquences étant donné la taille du projet, donc plutôt basse priorité
Pros & Cons
Examples de la syntaxe
Dagger/Hilt
Koin
Manuelle
Voir la pull request suivante : #84
Notamment, les fichiers
XpeApp.kt
etAppModule.kt
The text was updated successfully, but these errors were encountered: