Architecture (haut niveau) - ApplETS/Notre-Dame GitHub Wiki
🏗️ Architecture Générale (Vue Rapide)
Le projet suit une architecture model-view-viewmodel, tel que défini dans la documentation Flutter avec séparation claire entre :
┌──────────────────────────────────────────────────────────┐
│ PRÉSENTATION (UI) │
│ Views • ViewModels • Widgets • Navigation • Themes │
└──────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────┐
│ MÉTIER (Domain) │
│ Entities • Models • Constants • Business Rules │
└──────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────┐
│ DONNÉES (Data) │
│ Repositories • Services • Models API • Caching │
└──────────────────────────────────────────────────────────┘
↓
┌──────────────────────────────────────────────────────────┐
│ INFRASTRUCTURE EXTERNE │
│ APIs Distantes • Firebase • Bases de Données │
└──────────────────────────────────────────────────────────┘
📋 Les 4 Couches
Couche Domain (Métier)
Responsabilité: Contenir la logique métier pure et indépendante de toute framework
Contient:
- Modèles de domaine (Entities)
- Constantes métier
- Règles de validation métier
- Aucune dépendance à Flutter ou frameworks externes
Couche Data (Données)
Responsabilité: Gérer l'accès aux données, peu importe leur source (API, base de données, cache)
Contient:
- Repositories : Abstraction pour accéder aux données
- Services : Logique pour communiquer avec des APIs ou services externes
- Models : DTO (Data Transfer Objects) pour la communication avec les APIs
- Caching : Gestion du cache local
Couche UI (Présentation)
Responsabilité: Afficher les données et capturer les interactions utilisateur
Contient:
- Views : Pages/Écrans de l'application
- ViewModels : Logique d'affichage et gestion d'état
- Widgets : Composants réutilisables
- Navigation : Router et gestion des routes
- Themes : Styles et thèmes
🔄 Patterns de Communication
Pattern Repository + ViewModel + View
View (UI)
↓ (listens)
ViewModel (gère l'état)
↓ (appelle)
Repository
↓ (appelle)
Service/API
↓ (retourne)
Service/API → Repository → ViewModel → View
🎯 Principes Clés
1. Séparation des Responsabilités
Chaque couche a une responsabilité unique et bien définie. Les dépendances vont de haut en bas (UI → Logic → Domain → Data).
2. Flux de Dépendances
UI → Repository → Service → API
Les dépendances ne remontent jamais (API ne dépend pas de UI).
3. Gestion d'Erreurs
Chaque couche gère ses propres erreurs et les transforme appropriées:
- Data:
RepositoryException - UI:
LocalizedErrorMessage
4. Injection de Dépendances
Utilise GetIt pour l'injection, enregistrées dans locator.dart:
5. Testabilité
Chaque couche peut être testée indépendamment:
- Domain : Tests unitaires de la logique métier
- Data : Tests des repositories avec mocks des services
- UI : Tests des ViewModels et widgets
🛡️ Avantages de cette Architecture
✅ Simplicité: courbe d’apprentissage plus rapide pour les nouveaux développeurs
✅ Testabilité : Chaque couche peut être testée indépendamment
✅ Maintenabilité : Code bien organisé et facile à naviguer
✅ Scalabilité : Facile d'ajouter de nouvelles fonctionnalités
✅ Réutilisabilité : Services et repositories partagés
✅ Séparation des Préoccupations : Responsabilités claires
✅ Flexibilité : Facile de changer les implémentations (API, cache, etc.)
Voir aussi:
Cette page a été en partie générée avec l'aide de Claude Haiku 4.5