Skip to content
Cedric edited this page Feb 25, 2025 · 2 revisions

Introduction à la Clean Architecture et au Domain-Driven Design (DDD)

Pour un projet Flask robuste, évolutif et maintenable


🌐 Vue d'ensemble

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 : Une structure organisée

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 :

  1. Domain (Métier) : Contient les règles métier pures (entités, cas d’utilisation).
  2. Application : Orchestre les flux (services, DTOs).
  3. Infrastructure : Implémente les détails techniques (bases de données, routes Flask).
  4. 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 Domain-Driven Design (DDD) : Le métier avant tout

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).


🔗 Synergie entre Clean Architecture et DDD

  • 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.

🚀 Implémentation dans flask-boilerplate

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.


💡 Pourquoi est-ce important ?

  • É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.

📚 Prochaines étapes

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 !

🏗️ flask-boilerplate

🔍 Navigation


🧠 Concepts Clés

🧩 Clean Architecture

🎯 Domain-Driven Design


📂 Structure du Projet

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

🛠️ Guides & Tutoriels

  1. Premier cas d'utilisation
  2. Tests d'intégration
  3. Déploiement Docker
  4. Migration de base

🤝 Contribution


🔗 Liens Utiles

Clone this wiki locally