Skip to content

Commit d20e2f4

Browse files
committed
modulith tutorial
1 parent 400783f commit d20e2f4

File tree

2 files changed

+65
-8
lines changed

2 files changed

+65
-8
lines changed

README.md

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,14 +34,12 @@ Approche directe où la logique de limitation est appelée explicitement depuis
3434
## [Cache](database-access/cache-tutorial)
3535
Tutoriel sur la mise en place d'un système de cache pour améliorer les performances de vos applications.
3636

37-
## [Génération de code](developer-tools/code-generation-tutorial)
38-
Automatisez la création de code répétitif pour accélérer votre développement.
39-
### [Génération de client à partir de la spécification OpenAPI](developer-tools/code-generation-tutorial/client-generation-tutorial)
40-
Apprenez à générer automatiquement un client d'API REST à partir d'une spécification **OpenAPI (Swagger)**.
41-
[article](https://www.sfeir.dev/back/generer-vos-client-dapi-a-partir-de-leur-specification-openapi/)
42-
### [Génération de mappers](developer-tools/code-generation-tutorial/mapper-tutorial)
43-
Utilisez **MapStruct** pour générer automatiquement les mappers entre vos objets (par exemple, DTO et entités) et dire adieu au code de mapping manuel.
44-
[article](https://www.sfeir.dev/back/mapstruct-dites-adieu-au-code-repetitif/)
37+
## [Outils pour les Développeurs (Developer Tools)](developer-tools)
38+
Collection de tutoriels axés sur des outils et des techniques qui améliorent la productivité et la qualité du code.
39+
### [Génération de Code](developer-tools/code-generation-tutorial)
40+
Explore différentes techniques pour automatiser les tâches répétitives, notamment la génération de clients d'API (OpenAPI) et de mappers (MapStruct).
41+
### [Spring Modulith](developer-tools/modulith-tutorial)
42+
Démontre comment structurer une application en "modulithe" avec des frontières de modules claires et vérifiables.
4543

4644
## [Database versioning](database-access/database-versioning-tutorial)
4745
Gérez les évolutions de votre schéma de base de données de manière rigoureuse et automatisée.
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
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

Comments
 (0)