Structure du projet - ApplETS/Notre-Dame GitHub Wiki
📁 Structure du Projet
Arborescence Générale
notredame/
├── lib/
│ ├── domain/ # Couche métier
│ ├── data/ # Couche données
│ ├── logic/ # Couche logique
│ ├── ui/ # Couche présentation
│ ├── locator.dart # Configuration injection de dépendances
│ ├── router.dart # Configuration du routing
│ ├── main.dart # Point d'entrée de l'app
│ └── l10n/ # Internationalization
├── test/ # Tests unitaires et d'intégration
├── assets/ # Images, icônes, animations
├── android/ # Code Android natif
├── ios/ # Code iOS natif
├── pubspec.yaml # Dépendances et métadonnées
├── analysis_options.yaml # Configuration Dart/Flutter Lint
├── l10n.yaml # Configuration localisation
├── docs/ # Documentation
└── scripts/ # Scripts utilitaires
📂 Détail des Dossiers
1. lib/domain/ - Couche Métier
Contient la logique métier pure et indépendante de tout framework.
domain/
├── models/ # Modèles métier (Entities)
│ ├── session.dart
│ ├── session_progress.dart
│ └── ...
├── constants/ # Constantes métier
│ ├── routes_constants.dart
│ └── other_constants.dart
└── broadcast_icon_type.dart # Enums et types métier
Responsabilités:
- Définir les entités métier
- Contenir les règles de validation métier
- Pas de dépendances à Flutter ou frameworks externes
- Dépend uniquement de Dart standard
Exemple: domain/models/session.dart
2. lib/data/ - Couche Données
Gère l'accès aux données de toute source (API, cache, BD locale).
data/
├── repositories/ # Interfaces et implémentations repositories
│ ├── course_repository.dart
│ ├── base_stream_repository.dart # Base class pour les streams
│ └── ... (10+ repositories)
├── services/ # Services d'accès aux ressources
│ ├── auth_service.dart
│ ├── analytics_service.dart
│ ├── signets-api/ # Services Signets API
│ │ ├── signets_api_client.dart
│ │ └── models/
│ ├── hello/ # Services Hello API
│ │ └── hello_service.dart
│ └── ... (autres services)
└── models/ # DTOs et modèles API
├── broadcast_message.dart
├── hello/ # Modèles Hello API
│ ├── news.dart
│ ├── report.dart
│ └── ...
└── ... (autres modèles)
Responsabilités:
- Accéder à toute source de données
- Abstraire les détails d'implémentation (Repository Pattern)
- Gérer le caching
- Transformer les DTOs en entités métier
4. lib/ui/ - Couche Présentation
Interface utilisateur basée sur Flutter.
Structure Feature Typique:
feature/
├── widgets/
│ └── feature_view.dart
├── view_model/
│ └── feature_viewmodel.dart
└── models/ (optionnel)
Responsabilités:
- Afficher les données
- Capturer les interactions utilisateur
- Appeler les ViewModels
- Gérer l'état local de l'UI
5. lib/l10n/ - Internationalization
Gestion multilingue (FR/EN).
l10n/
├── app_en.arb
├── app_fr.arb
└── app_localizations.dart
6. Configuration Racine
lib/
├── locator.dart # Injection de dépendances (GetIt setup)
├── router.dart # Configuration routing (GoRouter/Navigator)
└── main.dart # Point d'entrée, initialisation Firebase, setup
🎯 Patterns de Nommage
Fichiers
- View :
*_view.dart(ex:schedule_view.dart) - ViewModel :
*_viewmodel.dart(ex:schedule_viewmodel.dart) - Repository :
*_repository.dart(ex:course_repository.dart) - Service :
*_service.dart(ex:auth_service.dart) - Model :
*.dartnom simple (ex:course.dart) - Widget réutilisable :
*_widget.dartou*_tile.dart
Classes
- ViewModel :
CourseViewmodelextendsChangeNotifier - Repository :
CourseRepository - Service :
CourseService - Model/Entity :
Course
Constantes
- Routes :
RouterPathsclass avec static strings
📊 Dépendances Entre Modules
UI Layer (schedule_view.dart)
↓ (depend on)
ViewModels (schedule_viewmodel.dart)
↓ (depend on)
Repositories (course_repository.dart)
↓ (depend on)
Services (signets_client_service.dart)
↓ (depend on)
External (Signets API, Firebase)
Règle d'Or: Les dépendances descendent toujours vers le bas, jamais vers le haut.
📝 Directives Importantes
Quoi mettre où?
| Élément | Emplacement | Raison |
|---|---|---|
| Logique métier | domain/ |
Réutilisable, testable indépendamment |
| Accès API | data/services/ |
Centralisé, facile à mocker |
| Transformation données | data/repositories/ |
Abstrait les détails techniques |
| Gestion d'état UI | ui/*/view_model/ |
Lié à la présentation |
| Affichage | ui/*/widgets/ |
Responsable unique: UI |
| Constantes globales | domain/constants/ |
Réutilisable partout |
| Utilitaires UI | ui/core/widgets/ |
Partagés entre features |
🔄 Flux Typique d'une Nouvelle Feature
-
Domain: Créer l'entité métier
lib/domain/models/my_entity.dart -
Data: Créer repository et service
lib/data/repositories/my_repository.dart lib/data/services/my_service.dart lib/data/models/my_dto.dart -
UI: Créer view et viewmodel
lib/ui/my_feature/widgets/my_view.dart lib/ui/my_feature/view_model/my_viewmodel.dart -
Config: Enregistrer dans locator
lib/locator.dart // Ajouter registration -
Routing: Ajouter la route
lib/router.dart // Ajouter case dans generateRoute()
Cette page a été en partie générée avec l'aide de Claude Haiku 4.5