|
| 1 | +# Tutoriel Spring Modulith |
| 2 | + |
| 3 | +## Introduction |
| 4 | + |
| 5 | +Ce projet est un exemple d'application Spring Boot structurée en utilisant [Spring Modulith](https://spring.io/projects/spring-modulith). Il a pour but de démontrer comment construire un "modulithe" : une application monolithique avec des frontières de modules claires et vérifiables. |
| 6 | + |
| 7 | +Cette approche combine la simplicité de développement et de déploiement d'un monolithe avec les avantages de la modularité, en s'inspirant fortement des principes du Domain-Driven Design (DDD). |
| 8 | + |
| 9 | +## Modules |
| 10 | + |
| 11 | +L'application est divisée en deux modules principaux, représentant des "Bounded Contexts" distincts : |
| 12 | + |
| 13 | +- **`product`**: Ce module est responsable de la logique métier liée aux produits. |
| 14 | +- **`notification`**: Ce module gère l'envoi de notifications. |
| 15 | + |
| 16 | +## Communication Inter-Modules |
| 17 | + |
| 18 | +La communication entre les modules `product` et `notification` est asynchrone et se fait via le mécanisme d'événements de Spring. |
| 19 | + |
| 20 | +1. Le `ProductService` (dans le module `product`) ne dépend pas directement du module de notification. |
| 21 | +2. Lorsqu'un produit est créé, `ProductService` publie un événement (`NotificationDTO`) en utilisant `ApplicationEventPublisher`. |
| 22 | +3. Le `NotificationService` (dans le module `notification`) écoute cet événement grâce à l'annotation `@EventListener` et traite la notification. |
| 23 | + |
| 24 | +Ce découplage fort est l'un des principaux avantages de l'approche Modulith. |
| 25 | + |
| 26 | +## Fonctionnalités de Spring Modulith |
| 27 | + |
| 28 | +Ce projet met en évidence plusieurs fonctionnalités clés de Spring Modulith : |
| 29 | + |
| 30 | +### 1. Vérification de la Structure Modulaire |
| 31 | + |
| 32 | +Le fichier `ModulithTest.java` contient des tests qui valident l'architecture modulaire : |
| 33 | +- `verifiesModularStructure()`: Ce test vérifie que les dépendances entre les modules sont conformes aux règles établies (par exemple, pas de dépendances cycliques ou de dépendances non autorisées). Si une dépendance non souhaitée est introduite dans le code, ce test échouera. |
| 34 | + |
| 35 | +Pour lancer la vérification, exécutez les tests Maven : |
| 36 | +```bash |
| 37 | +mvn clean verify |
| 38 | +``` |
| 39 | + |
| 40 | +### 2. Documentation des Modules |
| 41 | + |
| 42 | +Spring Modulith peut générer automatiquement de la documentation sur la structure de l'application. |
| 43 | +- `createModuleDocumentation()`: Ce test génère des diagrammes PlantUML décrivant les modules et leurs relations. |
| 44 | + |
| 45 | +Après avoir exécuté les tests, la documentation est disponible dans le répertoire `target/spring-modulith-docs`. Vous y trouverez : |
| 46 | +- Un diagramme C4 global. |
| 47 | +- Des diagrammes PlantUML pour chaque module. |
| 48 | + |
| 49 | +## Comment lancer l'application |
| 50 | + |
| 51 | +Vous pouvez lancer l'application de plusieurs manières : |
| 52 | + |
| 53 | +- Via la classe `Application.java` dans votre IDE. |
| 54 | +- En utilisant Maven : |
| 55 | + ```bash |
| 56 | + mvn spring-boot:run |
| 57 | + ``` |
| 58 | + |
| 59 | +Au démarrage, l'application crée un produit, ce qui déclenche l'envoi d'une notification que vous pouvez voir dans les logs. |
0 commit comments