Bibliothèque · Résumé et avis

The little Eventmodeling Book

De Martin Dilger · 2025. Le companion Q&R de 72 pages à Understanding Eventsourcing — Event Modeling de la première question au premier atelier d'équipe.

FR EN
Couverture de The little Eventmodeling Book, Martin Dilger 2025

The little Eventmodeling Book

The little Eventmodeling Book: Typical Eventmodeling Questions - quickly answered

6 /10

« 72 pages et 17 questions pour décrypter la langue Event Modeling avant de rejoindre une équipe. »

  • AuteurMartin Dilger
  • VONebulit, 2025 · 72 pages
  • PrixPDF gratuit
  • LangueEn anglais uniquement
  • Fiche~10 min de lecture
Notation du livre sur 5 dimensionsIdées6/10Applicable9/10Lisibilité8/10Actualité9/10Exemples6/10

Le guide Q&A pour décrypter Event Modeling : les 3 briques du système, le check d'exhaustivité, le Command Handler pur — et les 8 étapes pour démarrer en équipe.

Pourquoi ce booklet

Vous rejoignez une équipe qui parle de « slices », de « Read Models » et d'« Information Completeness Check ». Vos collègues griffonnent des post-its orange et bleus sur un tableau Miro et expliquent le système de gauche à droite. Vous ne savez pas où accrocher votre compréhension.

Ce Q&R de 72 pages répond à exactement ce problème. Martin Dilger — auteur du volumineux Understanding Eventsourcing (600 pages) — en a extrait les 17 questions les plus fréquentes sur Event Modeling, la méthode de conception visuelle qui précède et structure l'implémentation. Ce n'est ni un tutoriel complet ni le gros livre : c'est un guide de démarrage rapide pour décrypter la langue de votre équipe et modéliser votre premier flow en autonomie.

Les idées qui restent

Cinq idées à emporter — dans l'ordre où elles se construisent les unes sur les autres.

1Event Modeling résout un problème de communication, pas un problème technique

Imaginez la réunion de lancement d'un projet. Les devs parlent d'agrégats (groupes d'objets liés qui changent ensemble comme une seule unité) et d'API. Le chef de produit parle de parcours utilisateur. Le testeur parle de cas d'usage. Personne ne parle de la même chose.

Event Modeling répond à ça. La méthode produit un tableau visuel — une suite de post-its lisible de gauche à droite — que les développeurs, les testeurs et les stakeholders métier peuvent lire sans formation préalable. Dilger formule l'idée ainsi : « une langue universelle qui décrit les besoins de façon si précise que développeurs et métier peuvent tous les deux comprendre ce qu'il faut construire. » (ch. 2)

Un Event Model : 4 swimlanes, lecture de gauche à droite Écran Commande Événement Read Model [ Réserver une place ] [ Confirmer → ] BookSeat SeatBooked Mes réservations [ Mes réservations ] vue en direct temps
Un Event Model : 4 swimlanes — des rangées horizontales qui contiennent chacune un type d'objet (Écran, Commande, Événement, Read Model), comme les couloirs d'une piscine — lus de gauche à droite dans le temps. Une action utilisateur déclenche une commande (bleu), qui produit un événement (orange), qui alimente un read model (vert), qui met à jour l'écran (pointillés). Chaque boîte est un mot que le développeur, le testeur et le chef de produit lisent de la même façon.

Pourquoi ça marche : chaque case du tableau est soit un fait concret passé dans le système (un événement, passé immuable), soit une intention (une commande). Ces faits et ces intentions sont compréhensibles par tous, contrairement aux abstractions techniques. Le tableau est la langue commune, et c'est précisément cette langue commune qui manquait dans la plupart des projets IT.

Un point important à connaître dès le départ : Event Modeling ne requiert pas Event Sourcing. Dilger est explicite : « La réponse est clairement non. » (ch. 4) L'Event Sourcing n'est qu'une façon possible d'implémenter un système modélisé avec Event Modeling. Vous pouvez appliquer la méthode à un système legacy CRUD, une base SQL, ou n'importe quoi d'autre — le tableau décrit le flux d'information, pas la technologie de stockage.

2Tout le système se modélise avec seulement trois types de blocs

Voici la liste complète des briques d'Event Modeling. Il y en a exactement trois.

  • State Change Slice — l'unique façon d'amener de l'information DANS le système. Un utilisateur clique sur « Valider la commande » → la commande PasserCommande est envoyée → l'événement CommandePassée est enregistré. Toujours dans cet ordre : Source → Command → Event. Un seul Command par Slice, sans exception.
  • State View Slice — l'unique façon de SORTIR de l'information du système. L'événement CommandePassée alimente le read model CommandesActives, que l'écran « Mes commandes » affiche. Toujours : Event(s) → Read Model → Screen/Automation.
  • Third Party Integration (l'engrenage = Automation) — un appel vers un système externe. L'appel HTTP est dans l'engrenage ; la logique métier reste dans le Command Handler.
Les trois types de slices en Event Modeling State Change State View 3rd Party Écran ou Automation Command Événement amène info Événement(s) Read Model Écran ou Automation sort info Événement Command appel externe UI / Automation Command Événement Read Model
Les trois et seulement trois briques d'Event Modeling. Tout flux du système est l'une de ces trois formes.

Une note sur la Third Party Integration qui surprend souvent : quand vous modélisez un appel d'API externe (par exemple, une passerelle de paiement), l'engrenage appelle l'API externe — mais la commande qu'il déclenche est pour votre système uniquement. La commande ConfirmerPaiement n'est pas « appeler Stripe ». C'est « enregistrer que le paiement a été confirmé », avec le résultat de Stripe déjà dans le payload de la commande. Votre logique métier reste pure ; l'appel externe reste dans l'infrastructure.

Flow complet, avec le paiement Stripe comme exemple.

  1. State Change. Écran → commande SoumettrePaiement → événement PaiementSoumis. L'intention est enregistrée. Stripe n'est pas encore appelé : votre système a seulement noté qu'un paiement a été demandé.
  2. Automation déclenchée. PaiementSoumis réveille le Process Manager. Le PM porte toute l'infrastructure : il appelle l'endpoint HTTP de Stripe, gère les timeouts et suit le compteur de tentatives dans son état rejoué (état reconstruit en ré-appliquant ses événements passés dans l'ordre — sans requête base de données, sans appel externe).
  3. Chemin nominal. Stripe retourne 200. Le PM émet la commande ConfirmerPaiement { stripeChargeId, montant }. Le Command Handler reçoit une commande dont le payload contient déjà le résultat Stripe. Il produit PaiementConfirmé. La logique métier n'a jamais touché Stripe.
  4. Chemin de retry. Stripe expire. Le PM relance. Il sait combien de tentatives ont été faites parce qu'il stocke ce compteur dans son propre état interne, reconstruit au redémarrage sans rappeler Stripe. Après trois échecs, il émet AbandonnerPaiementPaiementÉchoué → flow compensatoire (séquence corrective qui annule ce que les étapes précédentes ont engagé — annuler la commande, notifier l'utilisateur, libérer le stock réservé).
Third Party Integration : flow paiement Stripe avec Process Manager et retry PaiementSoumis ⚙ Process Manager écoute l'événement · appelle Stripe · émet la commande avec le résultat API Stripe externe ✓ succès ✗ retry ×3 → échec ConfirmerPaiement PaiementConfirmé CommandeActivée AbandonnerPaiement PaiementÉchoué CommandeAnnulée Événement (orange) Commande (bleu) Système externe Process Manager
Flow complet : le Process Manager (engrenage) se place entre votre système et Stripe. Branche gauche : Stripe réussit, le PM émet une commande avec le résultat dans le payload. Branche droite : après trois retries, le PM abandonne et un flow compensatoire se déclenche. Le Command Handler ne contacte jamais Stripe directement.

Process Manager ou Saga ? Pour une intégration externe unique, le Process Manager est le bon outil : un orchestrateur stateful (stateful : il conserve un état interne reconstruit par rejeu de ses événements passés, donc il sait toujours où il en est) qui porte l'appel Stripe, porte la logique de retry et rejoue proprement sans re-déclencher d'effets de bord. La Saga — un pattern de chorégraphie où chaque service réagit aux événements de façon autonome, sans coordinateur central — est mieux adaptée quand plusieurs services indépendants doivent se coordonner entre bounded contexts (sous-systèmes distincts avec leur propre modèle de données et vocabulaire, comme Facturation et Livraison) — un service de réservation hôtel et un service de location de voiture, chacun réagissant au même événement sans s'appeler mutuellement. Une API externe : un PM. Plusieurs services : chorégraphie (chaque service écoute l'événement qui le concerne et agit seul, sans chef d'orchestre).

3L'Information Completeness Check : aucune hypothèse laissée invisible

Le scénario classique : vous modélisez un read model « Solde disponible » qui affiche montant – blocages. En implémentation, vous découvrez que blocages n'est stocké dans aucun événement. Deux semaines de rework. Dilger : « La principale raison pour laquelle les projets logiciels prennent du retard, c'est les mauvaises hypothèses sur les données. » (ch. 5)

L'Information Completeness Check force à vérifier, pour chaque attribut d'un read model, que la valeur provient explicitement d'un événement connecté. Pas de flèche = pas de donnée = rouge. L'implémentation ne commence pas tant que tout est vert. La règle s'applique à tous les éléments : commandes, écrans, automations — chaque attribut doit être traçable jusqu'à une source.

Information Completeness Check : chaque attribut doit tracer vers un événement CommandePassée PrixBloqué ??? aucun event CommandesActives ✓ commandeId ✓ prixBloqué ✗ codePromo CHECK KO implémentation bloquée jusqu'à tous attrs = ✓
Le check d'exhaustivité : codePromo n'a pas d'événement source — la flèche est rouge, l'implémentation est bloquée tant que l'origine de la donnée n'est pas définie.

Avant de lire la suite : pourquoi est-il important de rendre la source explicite dès la modélisation plutôt qu'à l'implémentation ? Réfléchissez — puis déroulez. Parce que plus on découvre une donnée manquante tard, plus le correctif est coûteux : découverte à la modélisation = quelques minutes pour définir l'événement source ; découverte en sprint review = réécriture du schéma d'événement, du projecteur, et potentiellement de l'IU.

4Frontières d'agrégats et Command Handler pur

Deux règles qui semblent séparées mais partagent la même racine : garder le domaine pur.

Sur les agrégats : « Un agrégat est un périmètre de cohérence. » (ch. 10) Quand une commande touche deux agrégats en même temps, ce sont probablement les frontières qui sont mal tracées — pas la commande. Le test de Dilger : ces deux choses ont-elles vraiment besoin d'être cohérentes au même instant ? Si vous réservez un hôtel et une voiture, la voiture doit-elle être confirmée atomiquement avec l'hôtel ? Presque certainement non. Réservez l'hôtel, puis réservez la voiture ; si la voiture n'est pas disponible, annulez l'hôtel. Deux opérations éventuellement cohérentes. « Il n'existe aucune opération atomique qui dépose de l'argent sur un compte et en retire sur un autre. Ce sont deux opérations éventuellement cohérentes. » (ch. 10)

Sur le Command Handler : un Command Handler prend une liste d'événements passés plus une commande et retourne une liste de nouveaux événements. Rien d'autre. « Aucune dépendance externe, aucun Event Store. » (ch. 6) Pas d'appels HTTP. Pas de lecture en base. Pas besoin de mocks pour tester. « Pour tester un Command Handler, vous n'avez idéalement besoin de mocker quoi que ce soit. » (ch. 6) Le format de test est toujours GIVEN (événements passés = état courant) / WHEN (commande) / THEN (nouveaux événements). Une fonction pure, déterministe, testable en isolation complète.

Le Read Model est le miroir exact. Il prend des événements et retourne une projection — une vue calculée uniquement à partir des événements passés — sans commande, parce qu'un Read Model ne décide rien. Il observe et projette. Le tester utilise GIVEN (événements) / THEN (état du read model). Pas de WHEN.

La symétrie en un coup d'œil :

EntréeSortie
Command Handlerétat (reconstitué depuis les events passés) + intentionnouveaux événements
Read Modelévénementsvue lisible

L'un écrit l'histoire. L'autre la lit.

5Démarrer en 8 étapes — un atelier, un premier flow prêt à implémenter

Les 8 étapes de Dilger pour une équipe qui découvre Event Modeling :

  1. Introduction EM — une personne expérimentée explique la méthode (30 min).
  2. Brainstorm des événements — tout le monde ensemble liste tous les événements du système. Plus il y a de monde, mieux c'est. Phase chaotique ; l'imparfait est normal.
  3. Storyboard — mettre les événements en ordre. Trouver « l'histoire » du système, de gauche à droite.
  4. Grouper les événements — identifier les premiers clusters. Pas besoin que ce soit parfait ; ça évoluera.
  5. Ajouter les écrans — rendre le modèle visuel, donner un contexte aux événements.
  6. Ajouter commandes, read models, automations — sur un groupe à la fois, pas tout le modèle.
  7. Définir les swimlanes — premier débat sur les frontières de sous-systèmes et les responsabilités.
  8. Modéliser les slices en détail — attributs complets, Given/When/Thens écrits, Information Completeness Check vert.

« Une slice bien faite vaut mieux que quatre à moitié. » (ch. 16) Après l'étape 8, le modèle doit être assez précis pour être implémenté par n'importe qui dans l'équipe sans demander d'explication.

Dilger mappe aussi les slices sur Jira : une slice = un ticket, un chapitre (une flèche bleue regroupant plusieurs slices) = un epic. Les slices progressent de Created → Planned → Assigned → Review → Done. Toute modification d'une slice « Done » est traitée comme une nouvelle slice — elle repasse à Created et repart depuis le début du cycle.

Trois choses que je ne savais pas

Mon avis, honnêtement

Dilger connaît son sujet. L'Information Completeness Check justifie à lui seul la lecture de ce booklet — il formalise ce que chaque atelier de modélisation rencontre de façon informelle : on dessine un read model, quelqu'un demande « mais d'où vient ce champ ? », personne ne sait. En faire une contrainte de premier ordre qui bloque l'implémentation est une idée simple et puissante.

Le booklet est honnête sur ses limites : il renvoie au gros livre (600 pages) pour tout ce qui touche à l'implémentation. Ce qu'il donne en 72 pages suffit à suivre une conversation d'équipe, animer un premier atelier, et comprendre pourquoi vos collègues débattent des frontières d'agrégats de la façon dont ils le font.

Deux réserves à formuler clairement. D'abord : environ 15 % du contenu est commercial — le Miro toolkit Nebulit, le programme Accelerate, les appels à contacter Martin. Ce n'est pas caché, mais c'est là. Ensuite : Event Modeling est une méthode visuelle. Le format PDF perd la moitié de sa substance — les tableaux Miro avec les couleurs et les swimlanes. Si vous le pouvez, trouvez un exemple de board à regarder en parallèle du texte.

Odilon

Toujours valable en 2026 ?

Très actuel — le livre date de janvier 2025. Event Modeling comme méthode de conception continue de gagner du terrain avec l'essor des architectures événementielles. Un angle qui a pris de la pertinence depuis : les agents IA consomment des streams d'événements et des read models exactement comme les développeurs humains, avec le même besoin de flux bien nommés et auto-descriptifs. Un langage d'événements propre construit avec Event Modeling est aussi utile à un modèle de langage qui génère du code qu'à un développeur qui lit un stream.

Pour qui ?

Lisez-le si

  • Vous rejoignez une équipe qui pratique déjà Event Modeling et voulez décrypter le vocabulaire en deux heures
  • Votre équipe envisage d'adopter EM et cherchez une introduction courte à partager
  • Vous connaissez l'implémentation Event Sourcing mais pas la méthode de conception visuelle qui va avec
  • Vous avez lu Exploring CQRS and Event Sourcing et voulez la perspective « modeling first »

Passez si

  • Vous cherchez un guide d'implémentation (versioning d'événements, projections, Event Store) — lisez Understanding Eventsourcing directement
  • Vous avez déjà travaillé en Event Modeling avec une équipe expérimentée — rien de nouveau ici
  • Vous n'avez pas accès à Miro ou un outil équivalent — la méthode est difficile à pratiquer sans tableau collaboratif

Pour aller plus loin

Ce booklet couvre Event Modeling — la phase de conception. Pour la couche d'implémentation vers laquelle il pointe, Exploring CQRS and Event Sourcing (Microsoft P&P, PDF gratuit) couvre CQRS, Event Sourcing, Process Managers et Sagas sur un vrai projet, avec les trade-offs honnêtes et les leçons apprises. Le contexte DDD qui définit quand appliquer Event Sourcing se trouve dans Learning Domain-Driven Design (Khononov). Et pour le traitement complet en 600 pages de l'implémentation Event Sourcing — versioning, projections, design des streams — le propre Understanding Eventsourcing de Dilger (Leanpub) est le seul livre qui le couvre de bout en bout.

Commentaires (0)