Fiche 06.03 — Services, protocoles et dependency injection
Objectif
Comprendre comment séparer la logique technique dans des services, utiliser des protocoles et injecter les dépendances dans les ViewModels. C’est une base essentielle pour rendre une app testable.
1. Pourquoi créer des services ?
Un service regroupe une responsabilité claire.
Exemples :
Sans services, on finit par mettre du réseau, Firebase ou Core Data directement dans les Views.
2. Exemple sans protocole
C’est simple, mais difficile à remplacer dans les tests.
3. Ajouter un protocole
Le ViewModel dépend du protocole, pas de l’implémentation concrète.
4. Implémentation réelle
5. Mock pour les tests
Le mock permet de tester le ViewModel sans appeler Firebase ou une vraie API.
6. Injection dans un ViewModel
Le ViewModel ne sait pas si le service utilise Firebase, URLSession ou un mock.
7. Utilisation dans la View
L’injection peut être faite dans l’init de la vue, dans un container, ou depuis une racine d’app.
8. Éviter les singletons partout
Un singleton peut être pratique :
Mais si tout dépend de singletons, les tests deviennent plus compliqués.
Préférer :
Cela rend le code plus flexible.
Résumé
- Un service isole une responsabilité technique ou métier.
- Un protocole permet de dépendre d’une abstraction.
- L’injection de dépendance rend le ViewModel testable.
- Un mock remplace le vrai service pendant les tests.
- Évite de mettre Firebase, API ou Core Data directement dans la View.