Skip to content

Commit 1dd9ff6

Browse files
authored
Merge pull request #15
Article: Axon Web Code Generator
2 parents d98e14c + 756fcf8 commit 1dd9ff6

File tree

2 files changed

+169
-1
lines changed

2 files changed

+169
-1
lines changed

.gitignore

+4-1
Original file line numberDiff line numberDiff line change
@@ -22,4 +22,7 @@ pnpm-debug.log*
2222

2323
# jetbrains setting folder
2424
.idea/
25-
DOC/.HELP.md
25+
DOC/HELP/.HELP.md
26+
27+
HELP
28+
DOC/HELP
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,165 @@
1+
---
2+
title: "Axon Web Code Generator : Générateur CQRS + DDD avec Spring Boot"
3+
date: "2025-04-15"
4+
tags: ["Spring Boot", "Axon", "RabbitMQ", "PostgreSQL", "CQRS", "DDD", "Code Generator"]
5+
excerpt: "Axon Web Code Generator automatise la génération de projets backend en CQRS + DDD avec Spring Boot, Axon et RabbitMQ. Un outil puissant pour industrialiser le développement orienté domaine."
6+
author: "Papa COUNDIA"
7+
link: "https://github.com/coundia/axon-web-cqrs-generator"
8+
---
9+
10+
# Génération automatique de code CQRS + DDD avec Spring Boot et Axon
11+
12+
## 🧭 Introduction
13+
14+
Le développement d'applications métier structurées repose de plus en plus sur des architectures robustes,
15+
telles que **CQRS (Command Query Responsibility Segregation)** et **DDD (Domain-Driven Design)**.
16+
Toutefois, la mise en œuvre manuelle de ces patterns entraîne une répétition fastidieuse de code,
17+
souvent sujette à des erreurs.
18+
19+
**Axon Web Code Generator** a été conçu pour automatiser cette tâche.
20+
Il permet de générer une application backend complète à partir de simples définitions d'entités,
21+
en suivant les principes du **CQRS** et du **DDD**, avec une stack moderne basée sur **Spring Boot**,
22+
**Axon Framework**, **RabbitMQ**, **JPA** et **PostgreSQL**.
23+
24+
## 🎯 Objectif du projet
25+
26+
L'objectif est de :
27+
28+
- **Industrialiser** la production de code backend structuré
29+
- **Réduire le temps de développement** et les erreurs humaines
30+
- **Encourager les bonnes pratiques** d'architecture orientée domaine
31+
- **Offrir un point de départ cohérent** pour tout nouveau projet
32+
33+
## ⚙️ Technologies utilisées
34+
35+
Ce générateur repose sur :
36+
37+
- **Spring Boot** pour la structure de base
38+
- **Spring Data JPA** pour la persistance relationnelle
39+
- **Axon Framework** pour la gestion des commandes, requêtes et événements
40+
- **RabbitMQ** pour l'asynchrone et la découpe des responsabilités
41+
- **PostgreSQL** comme base de données
42+
- **Mustache** pour la génération des fichiers
43+
- **Swagger/OpenAPI** pour la documentation automatique des endpoints
44+
- **Java 17+** comme langage de programmation
45+
46+
## 🧠 Architecture générée
47+
48+
La structure du projet respecte une architecture hexagonale :
49+
50+
```bash
51+
domain/ # Agrégats, ValueObjects, Events
52+
application/ # DTOs, CommandHandlers, QueryHandlers
53+
infrastructure/ # Repositories JPA, RabbitMQ Producers
54+
presentation/ # Contrôleurs REST
55+
resources/templates/ # Templates Mustache pour la génération
56+
shared/ # Services utilitaires communs
57+
```
58+
59+
## 🚀 Mise en route
60+
61+
Démarrage du projet en local :
62+
63+
```bash
64+
./mvnw spring-boot:run
65+
```
66+
67+
## 🧪 Comment ça fonctionne ?
68+
69+
La génération se fait via un appel HTTP `POST` en fournissant un chemin de sortie et la définition d’une entité. Voici deux exemples :
70+
71+
### Génération de l’entité `Product`
72+
73+
```http
74+
POST http://127.0.0.1:8071/api/v1/generator/all
75+
Accept: application/x-ndjson
76+
Content-Type: application/json
77+
78+
{
79+
"outputDir": "/chemin/vers/products",
80+
"definition": {
81+
"name": "Product",
82+
"table": "products",
83+
"fields": [
84+
{ "name": "id", "type": "String" },
85+
{ "name": "name", "type": "String" },
86+
{ "name": "price", "type": "Double" },
87+
{ "name": "sales", "type": "List<com.example.Sale>", "relation":"oneToMany" }
88+
]
89+
}
90+
}
91+
```
92+
93+
### Génération de l’entité `Sale`
94+
95+
```http
96+
POST http://127.0.0.1:8071/api/v1/generator/all
97+
Accept: application/x-ndjson
98+
Content-Type: application/json
99+
100+
{
101+
"outputDir": "/chemin/vers/sales",
102+
"definition": {
103+
"name": "Sale",
104+
"table": "sales",
105+
"fields": [
106+
{ "name": "id", "type": "String" },
107+
{ "name": "quantity", "type": "Integer" },
108+
{ "name": "total_price", "type": "Double" },
109+
{ "name": "facture", "type": "String" },
110+
{ "name": "Product", "type": "com.example.Product", "relation":"manyToOne" }
111+
]
112+
}
113+
}
114+
```
115+
116+
## 📂 Structure du projet généré:
117+
```bash
118+
domain/ # Agrégats, ValueObjects, Events
119+
application/ # DTOs, CommandHandlers, QueryHandlers
120+
infrastructure/ # Repositories JPA, RabbitMQ Producers
121+
presentation/ # Contrôleurs REST
122+
shared/ # Services utilitaires communs
123+
```
124+
125+
Les classes générées incluent :
126+
127+
- Commandes (Create, Update, Delete)
128+
- Événements (Created, Updated, Deleted)
129+
- Agrégats
130+
- QueryHandlers & CommandHandlers
131+
- Projections (avec JPA)
132+
- Entités persistantes
133+
- DTOs & REST Controllers
134+
135+
136+
## 🧩 Domaines d’application
137+
138+
Cet outil s’applique dans de nombreux contextes métier :
139+
140+
- Systèmes de gestion commerciale (ERP, stock, facturation)
141+
- Plateformes e-commerce
142+
- Applications SaaS B2B
143+
- Systèmes de réservation
144+
- Outils internes d’entreprise
145+
- Projets open-source structurés
146+
147+
## 🔗 Dépôt GitHub
148+
149+
Le code source complet est accessible ici :
150+
151+
https://github.com/coundia/axon-web-cqrs-generator
152+
153+
Un exemple de code généré est disponible dans le dépôt suivant :
154+
155+
👉 [https://github.com/coundia/spring-axon-rabbitmq-web-jpa-starter](https://github.com/coundia/spring-axon-rabbitmq-web-jpa-starter)
156+
157+
## ✅ Conclusion
158+
159+
**Axon Web Code Generator** répond au besoin crucial d’industrialisation du développement backend moderne. En générant automatiquement des composants respectant les principes **CQRS** et **DDD**, il permet de se concentrer sur la logique métier tout en s’appuyant sur une architecture solide et maintenable.
160+
161+
Cet outil s’adresse aux architectes, développeurs et équipes cherchant à standardiser et accélérer leurs développements tout en respectant les bonnes pratiques logicielles.
162+
163+
Ce projet est en constante évolution.
164+
165+
---

0 commit comments

Comments
 (0)