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 : *.dart nom simple (ex: course.dart)
  • Widget réutilisable : *_widget.dart ou *_tile.dart

Classes

  • ViewModel : CourseViewmodel extends ChangeNotifier
  • Repository : CourseRepository
  • Service : CourseService
  • Model/Entity : Course

Constantes

  • Routes : RouterPaths class 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

  1. Domain: Créer l'entité métier

    lib/domain/models/my_entity.dart
    
  2. Data: Créer repository et service

    lib/data/repositories/my_repository.dart
    lib/data/services/my_service.dart
    lib/data/models/my_dto.dart
    
  3. UI: Créer view et viewmodel

    lib/ui/my_feature/widgets/my_view.dart
    lib/ui/my_feature/view_model/my_viewmodel.dart
    
  4. Config: Enregistrer dans locator

    lib/locator.dart  // Ajouter registration
    
  5. 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