-
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Pour un projet Flask robuste, évolutif et maintenable
Ce wiki a pour objectif de vous guider dans la compréhension des principes structurants du projet flask-boilerplate : la Clean Architecture (Architecture Propre) et le Domain-Driven Design (DDD). Ces deux approches complémentaires visent à créer des applications logicielles maintenables, testables et alignées avec les besoins métier, même dans un contexte complexe.
La Clean Architecture est un modèle architectural qui sépare clairement les responsabilités de l'application en couches distinctes, garantissant :
- L’indépendance des frameworks (comme Flask) et des outils externes (bases de données, APIs).
- La testabilité : chaque composant peut être testé isolément.
- La focalisation sur le domaine métier au cœur du système.
Couches principales :
- Domain (Métier) : Contient les règles métier pures (entités, cas d’utilisation).
- Application : Orchestre les flux (services, DTOs).
- Infrastructure : Implémente les détails techniques (bases de données, routes Flask).
- Présentation : Gère les interactions utilisateur (API, templates).
Exemple : La logique d’inscription d’un utilisateur (RegisterUserUseCase) reste inchangée, même si vous remplacez SQLAlchemy par MongoDB.
Le DDD est une méthodologie qui place le domaine métier au centre de la conception logicielle. Il encourage :
- Le langage omniprésent : Un vocabulaire partagé entre développeurs et experts métier.
-
Les contextes délimités (Bounded Contexts) : Découpage du système en modules autonomes (ex:
Authentification,Gestion des commandes). - Les modèles riches : Entités, agrégats et services de domaine qui encapsulent la logique métier.
Exemple : Un objet User n’est pas juste une structure de données, mais une entité avec des règles (validation d’email, permissions).
- La Clean Architecture fournit un cadre pour organiser le code, tandis que le DDD guide la modélisation du domaine.
- Le Domain Layer (couche métier) devient le cœur isolé, protégé des changements techniques.
- Les Use Cases (cas d’utilisation) matérialisent les scénarios métier définis via le DDD.
Ce projet utilise ces concepts pour offrir une base solide :
-
Structure de fichiers claire :
-
domain/: Entités et interfaces métier. -
application/: Cas d’utilisation et services. -
infrastructure/: Implémentations concrètes (repositories, routes). -
presentation/: Contrôleurs Flask et endpoints API.
-
- Découplage : Les dépendances vont du niveau le plus abstrait (domaine) au plus concret (infrastructure).
Exemple : La route /register (présentation) appelle un AuthService (application), qui utilise un UserRepository (infrastructure) pour persister les données.
- Évolutivité : Ajoutez des fonctionnalités sans craindre de "casser" l’existant.
- Maintenance facilitée : Comprendre et modifier le code devient intuitif.
- Tests automatisés : Mockez facilement les bases de données ou les UI.
- Collaboration : Développeurs et métier parlent le même langage.
Dans les articles suivants, nous détaillerons chaque concept :
- Clean Architecture : Découpage des couches et bonnes pratiques.
- DDD : Modélisation du domaine, agrégats et contextes.
- Intégration avec Flask : Services, DI (Injection de Dépendances), et gestion des erreurs.
Ce boilerplate n’est pas juste un modèle vierge, mais une fondation pour des applications Flask structurées professionnellement. 🏗️
Prêt à plonger dans le code ? Explorez le répertoire domain/ pour voir le métier en action !
📁 Structure du projet | 📚 Documentation du Wiki | 🐛 Signaler un bug
| Composant | Technologies clés |
|---|---|
| Core | Python 3.12, Clean Architecture, DDD |
| Infra | Flask, SQLAlchemy, Pydantic |
| Qualité | pytest, mypy, ruff, pre-commit |
| DevOps | Docker, Makefile, GitHub Actions |
👷 Maintenu par Cédric | 💡 Inspiré par Robert C. Martin (Clean Architecture) et Eric Evans (DDD)
flask-boilerplate/
├── domain/ # Couche métier pure
├── application/ # Orchestration des cas d'utilisation
├── infrastructure/ # Implémentations techniques
├── presentation/ # Contrôleurs et endpoints
└── tests/ # Tests automatisés