Article

Atelier

Craft

Event Sourcing

Une journée d’ateliers craft – retour d’expérience sur l’Event Sourcing

Ateliers craft

Arthur, Lead Développeur Java chez Peaks, a récemment participé à une journée d’ateliers craft organisée par la communauté Software Crafters Lyon dans les locaux d’Ada Tech School.
L’objectif : expérimenter, en conditions réelles, plusieurs pratiques plébiscitées du Software Craftsmanship, parmi lesquelles :

  • Le Test-Driven Development
  • Le Pair/Mob programming
  • L’Architecture Hexagonale (front et back)
  • Le Refactoring
  • Le Functional Programming
  • Le Domain Driven Design
  • L’Event Sourcing

Contrairement à une conférence plus classique, où l’on reste souvent passif, même si en écoute active, cette journée proposait un format actif et immersif. Chaque participant était invité à réaliser un exercice de codage guidé pour découvrir un thème ou un sujet spécifique.

Voici les différents thèmes craft de la journée :

programme journée ateliers craft organisée par les Software Crafters Lyon

Parmi ces ateliers craft, Arthur a particulièrement apprécié l’Event Sourcing step by step, présenté par Romain Berthon. Il vous partage ici ses apprentissages et son retour d’expérience.

Mais d’abord, définissons rapidement l’Event Sourcing.

C’est un pattern architectural qui consiste à stocker l’ensemble des événements (immuables) d’un système et non pas uniquement l’état actuel des données, traditionnellement mis en oeuvre.
Il a notamment pour avantage d’amener une traçabilité et un historique complet des actions ayant eu lieu sur les entités du système.

Passons maintenant à la pratique !

L’atelier présente un système représentant une ampoule, modélisé ainsi :

  • L’ampoule peut recevoir les commandes Allumer ou Éteindre qui ont un effet uniquement si l’ampoule est respectivement Éteinte ou Allumée.
  • L’ampoule peut être allumée un certain nombre de fois, après quoi elle est cassée et ne fonctionne plus.

L’exercice commence donc par implémenter ces différentes règles métiers de manière classique. 

Modéliser l’état du système

On s’aperçoit alors que pour déterminer l’effet de la commande reçue par le système (Allumer/Éteindre), nous avons besoin de sauvegarder l’état du système, à savoir :

  • L’ampoule est-elle cassée ou fonctionnelle ?
  • Si elle fonctionne :
    • Est-elle allumée ou éteinte ?
    • Combien d’allumages restants possède-t-elle encore ?

La première étape est donc la suivante : 

schéma système decide

Séparer les responsabilités : decide / evolve

Dans une seconde étape, nous découpons les responsabilités entre notre fonction decide qui détermine un événement et une fonction evolve qui applique les effets de cet événement couplé à l’état précédent pour en déduire le nouvel état.

Les événements peuvent être :

  • L’ampoule s’est allumée
  • L’ampoule s’est éteinte
  • L’ampoule s’est cassée
schéma séparer les responsabilités decide evolve craft

Faire évoluer l’état à partir d’une liste d’événements

Nous faisons ensuite évoluer notre fonction evolve pour qu’elle puisse traiter une collection d’événements (même si la collection n’a qu’un seul élément dans un premier temps), grâce à la récursivité ou Stream.reduce (pour Java)

C’est aussi à ce moment-là que nous commençons également à persister ces événements en mode append only

schéma événements decide evolve

Nous nous rendons alors compte que globalement, nous avons quelque chose comme cela : 

schéma événements decide evolve craft

Notre fonction evolve pouvant traiter une collection d’événements, nous pouvons alors simplifier cela ainsi : 

schéma événements decide evolve

On remarque alors que la persistance de l’état à chaque commande reçue n’est plus nécessaire. 

Lorsque l’on reçoit une commande : 

  • On calcule à la volée l’état du système avant la commande en appliquant tous les événements passés à partir de notre état initial
  • Puis la commande et notre état temporaire détermine les nouveaux événements à appliquer pour obtenir notre nouvel état

Nous obtenons donc un système pour lequel nous ne persistons plus que les événements du système et plus son état. 

L’application des effets de cet ensemble d’événements nous permet à chaque instant de reconstruire l’état de notre système.

Nous avons donc réussi à implémenter ce qu’on appelle une architecture Event Sourcing où nos événements sont notre source de vérité primaire.

NB : aller jusqu’au 100% événementiel

Pour obtenir un système 100% événementiel et ne plus garder la mémoire de notre état initial, nous pouvons alors : 

  • Considérer cet état initial comme une constante, toutes les ampoules seront les même
  • Considérer une commande d’initialisation de l’ampoule qui déterminera un événement d’initialisation également avec les caractéristiques propre à une ampoule

Consignes et correction (en F#) de l’atelier disponibles ici : 

https://github.com/RomainTrm/Workshop-Event-Sourcing-Crafters

J’ai beaucoup apprécié cette journée d’ateliers et ai trouvé intéressant les concepts explorés.

De plus, la plupart des ateliers peuvent être réalisés dans le langage de son choix, nous ne sommes pas figés sur une techno, puisque que ce sont plus des concepts et des designs dont il est question.

Enfin, comme ce sont des ateliers qui se prêtent très bien au pairing, c’est aussi l’occasion de rencontrer d’autres personnes de la communauté dev lyonnaise et retrouver d’anciens collègues parfois aussi 😉

Pour information, les Software Crafters sont un des groupes tech les plus actifs à Lyon à ma connaissance. Je vous encourage vivement à aller tester par vous-même, notamment les coding dojos (en présentiel ou en ligne), auxquels je participe régulièrement. Ils sont organisés plusieurs fois par mois : 

https://www.meetup.com/fr-fr/software-craftsmanship-lyon

Arthur Peaks
Arthur, Lead Développeur Java @Peaks

Ces articles peuvent vous intéresser

  • Expert Cybersécurité Grand Est, audit des systèmes

    Cybersécurité Grand Est : Peaks, votre Partenaire référencé en sécurité numérique

    Audit

    CyberSécurité

    Grand Est

    Lire
  • Stagiaires et alternants Peaks 2025

    Témoignages de nos stagiaires 2025 : retour d’expérience

    alternant

    Développement web

    stagiaire

    Lire
  • Peaks Training Club

    Certification Qualiopi renouvelée

    Formation

    PeaksLife

    Lire