Fiche 06.01 — Pourquoi l’architecture compte : MVC, MVVM, services
Objectif
Comprendre pourquoi il faut organiser le code d’une app iOS, même en SwiftUI. L’objectif n’est pas d’appliquer une architecture compliquée, mais d’éviter les vues énormes, difficiles à tester et impossibles à maintenir.
1. Le problème d’une View qui fait tout
Dans une petite démo, on peut mettre beaucoup de code dans une vue. Dans une vraie app, ça devient vite illisible.
Exemple à éviter :
La vue finit par gérer :
- l’affichage ;
- la validation ;
- le réseau ;
- la navigation ;
- la persistance ;
- les erreurs ;
- les tests deviennent difficiles.
2. Rôle d’une View
Une View SwiftUI doit surtout :
- afficher l’état ;
- récupérer les actions utilisateur ;
- déclencher des méthodes du ViewModel ;
- rester lisible.
La vue ne devrait pas contenir toute la logique de connexion.
3. Rôle d’un ViewModel
Le ViewModel prépare les données pour la vue et gère la logique d’écran.
Il peut contenir :
email,password;isLoading;errorMessage;isFormValid;- méthode
login(); - appel au service d’auth.
4. Rôle d’un service
Un service s’occupe d’un domaine technique ou métier :
AuthService: connexion, inscription, logout ;UserService: profil utilisateur ;APIClient: réseau ;StorageService: upload image ;LocationService: localisation.
Le service évite de mettre du réseau ou Firebase directement dans le ViewModel.
5. MVC rapidement
MVC signifie : Model, View, Controller.
Dans UIKit, on voit souvent :
Le risque du MVC UIKit est d’avoir des UIViewController énormes.
En SwiftUI, il n’y a pas toujours de ViewController, mais on peut reproduire le même problème si les Views deviennent trop grosses.
6. MVVM simplement
MVVM signifie : Model, View, ViewModel.
Flux simple :
7. Architecture utile, pas architecture parfaite
Le but n’est pas de créer 15 couches partout. Pour une petite feature, MVVM + service suffit.
Une architecture est bonne si elle permet :
- de lire facilement le code ;
- de tester la logique ;
- de remplacer un service par un mock ;
- d’éviter les vues énormes ;
- de modifier une feature sans casser toute l’app.
Résumé
- Une View doit afficher, pas tout gérer.
- Le ViewModel contient l’état et la logique de l’écran.
- Les services gèrent le réseau, Firebase, stockage, localisation, etc.
- MVVM est très adapté à SwiftUI.
- L’objectif est un code lisible, testable et maintenable.