SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
Coding Dojo EventSourcing 
CARA Lyon – 21 octobre 2014 – Hébergé par l’INSA
A venir dans vos communautés… 
23/10 : Tests avec TFS 
04/11 : CARA Lyon 
15/11 : Global Day of CodeRetreat, journée entière le samedi 
18/11 : Human Talks 
25/11 : Coding Dojo => sujet à discuter sur 
https://groups.google.com/forum/#!forum/cara-dojo, approches des 
différents frameworks ? (xSpec, Gherkin, xxxUnit) 
Et encore plus sur http://lyontechhub.org
Le sujet du jour… 
Suite à la session de Jérémie Chassaing (@thinkb4coding) au MUGLyon, 
mettons en pratique l’Event Sourcing sur le jeu du Uno. 
Quelques règles de bases du Uno : 
• Démarrer une partie avec au moins 3 joueurs 
• Jouer une carte à son tour (même couleur ou même numéro) 
• Pour aller plus loin : gérer les cartes spéciales (changement de 
sens…), gérer les malus en cas d’erreur (Event plutôt qu’exception)
Quelques clés de l’EventSourcing 
Conserver la succession d’événements métier PLUTÔT QUE l’état actuel du système 
• /! Command Sourcing 
Définir des événements métier (Event) autour d’AggregateRoot générés à partir de 
Command (atelier EventStorming, 6 code smells) => lien avec le DDD 
Reconstruire l’état actuel à partir de la suite d’événements passés 
Lien avec CQRS (Command Query Responsability Seggregation): on n’utilise pas 
forcément le modèle à base d’EventSourcing pour les opérations de lecture (Query) 
=> opérations de projection des événements dans un modèle de lecture spécifique
Un schéma plutôt que des mots… 
« Decide » Command Events 
« Apply » 
EventStore 
State 
Event Sourcing 
CQRS 
« Project » 
SGBD 
Query Base NoSQL
A vous de jouer… 
1. AggregateRoot Game, Command StartGame, Event GameStarted => 
« fonction Decide » + EventStore (stockage en mémoire) 
> Comment passer les événements de l’AggregateRoot à l’EventStore, 
sachant que ce n’est qu’un écouteur parmi d’autres des Events levés ? 
> Pistes : AggregateRoots.GetEvents, DomainEvent.Raise, autres ? 
2. Command PlayCard, Event CardPlayed + exceptions => 
« fonction Apply » 
3. Chargement d’un Aggregat à partir des événements 
4. Gestion de la concurrence, de cas plus complexes (cartes spéciales, 
Event au lieu d’exceptions…), changement de support de stockage 
(GetEventStore…)
Feedback 
MERCI !
Quelques références 
En C# : https://github.com/gregoryyoung/m-r, 
En F# : https://github.com/thinkbeforecoding/FsUno, 
http://thinkbeforecoding.github.io/FsUno.Prod/ 
En PHP : https://github.com/beberlei/litecqrs-php, 
https://github.com/qandidate-labs/broadway 
En Java : http://www.jayway.com/2013/03/08/aggregates-event-sourcing- 
distilled/ ? 
En Ruby : https://github.com/slashdotdash/rcqrs ? 
En Scala : https://github.com/eligosource/eventsourced-example ?

Contenu connexe

En vedette

Calender 2015: The Festivals of Goa
Calender 2015: The Festivals of GoaCalender 2015: The Festivals of Goa
Calender 2015: The Festivals of GoaGoa Tourism
 
Top 10 Micron Associates world tourists plugs │Blogspot
Top 10 Micron Associates world tourists plugs │BlogspotTop 10 Micron Associates world tourists plugs │Blogspot
Top 10 Micron Associates world tourists plugs │BlogspotAmirah Morss
 
LEDLYT / Catalogue gamme horticole au 03-2013
LEDLYT / Catalogue gamme horticole au 03-2013LEDLYT / Catalogue gamme horticole au 03-2013
LEDLYT / Catalogue gamme horticole au 03-2013ledlyt
 
Typo3 rdq ( relais de quartier)
Typo3  rdq      (  relais de quartier)Typo3  rdq      (  relais de quartier)
Typo3 rdq ( relais de quartier)teyssendie
 
Rezé mensuel décembre14
Rezé mensuel décembre14Rezé mensuel décembre14
Rezé mensuel décembre14Fjt Grand Voile
 
Je suis allé en ville et j'ai acheté...
Je suis allé en ville et j'ai acheté...Je suis allé en ville et j'ai acheté...
Je suis allé en ville et j'ai acheté...HA MFL Department
 
Pour moi Noël c'est...
Pour moi Noël c'est...Pour moi Noël c'est...
Pour moi Noël c'est...dgyrc
 
Biodiversidad en mexico
Biodiversidad en mexicoBiodiversidad en mexico
Biodiversidad en mexicoantoniohdez97
 
Turismo en madrid chenbin lin
Turismo en madrid   chenbin linTurismo en madrid   chenbin lin
Turismo en madrid chenbin linTianni
 
2014 06-11 - info pour burlington
2014 06-11 - info pour burlington2014 06-11 - info pour burlington
2014 06-11 - info pour burlingtonLesdiplomates
 
Fiestas jorge cando
Fiestas jorge candoFiestas jorge cando
Fiestas jorge candojorgkrs
 
Proyecto de herramientas
Proyecto de herramientasProyecto de herramientas
Proyecto de herramientasEmily García
 

En vedette (20)

EL LOBITO BUENO.......
EL LOBITO BUENO.......EL LOBITO BUENO.......
EL LOBITO BUENO.......
 
Calender 2015: The Festivals of Goa
Calender 2015: The Festivals of GoaCalender 2015: The Festivals of Goa
Calender 2015: The Festivals of Goa
 
Top 10 Micron Associates world tourists plugs │Blogspot
Top 10 Micron Associates world tourists plugs │BlogspotTop 10 Micron Associates world tourists plugs │Blogspot
Top 10 Micron Associates world tourists plugs │Blogspot
 
LEDLYT / Catalogue gamme horticole au 03-2013
LEDLYT / Catalogue gamme horticole au 03-2013LEDLYT / Catalogue gamme horticole au 03-2013
LEDLYT / Catalogue gamme horticole au 03-2013
 
Typo3 rdq ( relais de quartier)
Typo3  rdq      (  relais de quartier)Typo3  rdq      (  relais de quartier)
Typo3 rdq ( relais de quartier)
 
Rezé mensuel décembre14
Rezé mensuel décembre14Rezé mensuel décembre14
Rezé mensuel décembre14
 
Je suis allé en ville et j'ai acheté...
Je suis allé en ville et j'ai acheté...Je suis allé en ville et j'ai acheté...
Je suis allé en ville et j'ai acheté...
 
Cátedra de Grafos
Cátedra de GrafosCátedra de Grafos
Cátedra de Grafos
 
Mkg 2.0
Mkg 2.0Mkg 2.0
Mkg 2.0
 
Obama au myanmar
Obama au myanmarObama au myanmar
Obama au myanmar
 
Datos bivariados
Datos bivariadosDatos bivariados
Datos bivariados
 
stergiou hatzianastasiou
 stergiou hatzianastasiou stergiou hatzianastasiou
stergiou hatzianastasiou
 
Our next vacations
Our next vacationsOur next vacations
Our next vacations
 
Pour moi Noël c'est...
Pour moi Noël c'est...Pour moi Noël c'est...
Pour moi Noël c'est...
 
Biodiversidad en mexico
Biodiversidad en mexicoBiodiversidad en mexico
Biodiversidad en mexico
 
Turismo en madrid chenbin lin
Turismo en madrid   chenbin linTurismo en madrid   chenbin lin
Turismo en madrid chenbin lin
 
Herramientas en excel
Herramientas en excelHerramientas en excel
Herramientas en excel
 
2014 06-11 - info pour burlington
2014 06-11 - info pour burlington2014 06-11 - info pour burlington
2014 06-11 - info pour burlington
 
Fiestas jorge cando
Fiestas jorge candoFiestas jorge cando
Fiestas jorge cando
 
Proyecto de herramientas
Proyecto de herramientasProyecto de herramientas
Proyecto de herramientas
 

Similaire à 20141021 - Coding dojo EventSourcing

Retour d'expérience développement jeux android
Retour d'expérience développement jeux androidRetour d'expérience développement jeux android
Retour d'expérience développement jeux androidjodem
 
Journées SQL Server 2011 Extended Events
Journées SQL Server 2011  Extended Events Journées SQL Server 2011  Extended Events
Journées SQL Server 2011 Extended Events David BAFFALEUF
 
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?Paris Salesforce Developer Group
 

Similaire à 20141021 - Coding dojo EventSourcing (6)

Retour d'expérience développement jeux android
Retour d'expérience développement jeux androidRetour d'expérience développement jeux android
Retour d'expérience développement jeux android
 
Multi-Threading Et Cocoa
Multi-Threading Et CocoaMulti-Threading Et Cocoa
Multi-Threading Et Cocoa
 
Journées SQL Server 2011 Extended Events
Journées SQL Server 2011  Extended Events Journées SQL Server 2011  Extended Events
Journées SQL Server 2011 Extended Events
 
Tsung GIS
Tsung GISTsung GIS
Tsung GIS
 
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
Scratch orgs...vous pensiez en avoir terminé avec les sandboxes ?
 
Introduction à node.js
Introduction à node.js Introduction à node.js
Introduction à node.js
 

Plus de Clement Bouillier

EventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-MarseilleEventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-MarseilleClement Bouillier
 
20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyon20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyonClement Bouillier
 
20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks Lyon20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks LyonClement Bouillier
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyonClement Bouillier
 
20131008 - uxda - human talk
20131008 - uxda - human talk20131008 - uxda - human talk
20131008 - uxda - human talkClement Bouillier
 

Plus de Clement Bouillier (6)

EventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-MarseilleEventStorming Agile Tour Aix-Marseille
EventStorming Agile Tour Aix-Marseille
 
20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyon20140227 - injection de dépendances - mug lyon
20140227 - injection de dépendances - mug lyon
 
20131214 - gdcr 2013 - lyon
20131214 - gdcr 2013 - lyon20131214 - gdcr 2013 - lyon
20131214 - gdcr 2013 - lyon
 
20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks Lyon20131210 - Hacker l’agilité - Human Talks Lyon
20131210 - Hacker l’agilité - Human Talks Lyon
 
20131024 qualité de code et sonar - mug lyon
20131024   qualité de code et sonar - mug lyon20131024   qualité de code et sonar - mug lyon
20131024 qualité de code et sonar - mug lyon
 
20131008 - uxda - human talk
20131008 - uxda - human talk20131008 - uxda - human talk
20131008 - uxda - human talk
 

20141021 - Coding dojo EventSourcing

  • 1. Coding Dojo EventSourcing CARA Lyon – 21 octobre 2014 – Hébergé par l’INSA
  • 2. A venir dans vos communautés… 23/10 : Tests avec TFS 04/11 : CARA Lyon 15/11 : Global Day of CodeRetreat, journée entière le samedi 18/11 : Human Talks 25/11 : Coding Dojo => sujet à discuter sur https://groups.google.com/forum/#!forum/cara-dojo, approches des différents frameworks ? (xSpec, Gherkin, xxxUnit) Et encore plus sur http://lyontechhub.org
  • 3. Le sujet du jour… Suite à la session de Jérémie Chassaing (@thinkb4coding) au MUGLyon, mettons en pratique l’Event Sourcing sur le jeu du Uno. Quelques règles de bases du Uno : • Démarrer une partie avec au moins 3 joueurs • Jouer une carte à son tour (même couleur ou même numéro) • Pour aller plus loin : gérer les cartes spéciales (changement de sens…), gérer les malus en cas d’erreur (Event plutôt qu’exception)
  • 4. Quelques clés de l’EventSourcing Conserver la succession d’événements métier PLUTÔT QUE l’état actuel du système • /! Command Sourcing Définir des événements métier (Event) autour d’AggregateRoot générés à partir de Command (atelier EventStorming, 6 code smells) => lien avec le DDD Reconstruire l’état actuel à partir de la suite d’événements passés Lien avec CQRS (Command Query Responsability Seggregation): on n’utilise pas forcément le modèle à base d’EventSourcing pour les opérations de lecture (Query) => opérations de projection des événements dans un modèle de lecture spécifique
  • 5. Un schéma plutôt que des mots… « Decide » Command Events « Apply » EventStore State Event Sourcing CQRS « Project » SGBD Query Base NoSQL
  • 6. A vous de jouer… 1. AggregateRoot Game, Command StartGame, Event GameStarted => « fonction Decide » + EventStore (stockage en mémoire) > Comment passer les événements de l’AggregateRoot à l’EventStore, sachant que ce n’est qu’un écouteur parmi d’autres des Events levés ? > Pistes : AggregateRoots.GetEvents, DomainEvent.Raise, autres ? 2. Command PlayCard, Event CardPlayed + exceptions => « fonction Apply » 3. Chargement d’un Aggregat à partir des événements 4. Gestion de la concurrence, de cas plus complexes (cartes spéciales, Event au lieu d’exceptions…), changement de support de stockage (GetEventStore…)
  • 8. Quelques références En C# : https://github.com/gregoryyoung/m-r, En F# : https://github.com/thinkbeforecoding/FsUno, http://thinkbeforecoding.github.io/FsUno.Prod/ En PHP : https://github.com/beberlei/litecqrs-php, https://github.com/qandidate-labs/broadway En Java : http://www.jayway.com/2013/03/08/aggregates-event-sourcing- distilled/ ? En Ruby : https://github.com/slashdotdash/rcqrs ? En Scala : https://github.com/eligosource/eventsourced-example ?