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è...
Le sujet du jour… 
Suite à la session de Jérémie Chassaing (@thinkb4coding) au MUGLyon, 
mettons en pratique l’Event Sourc...
Quelques clés de l’EventSourcing 
Conserver la succession d’événements métier PLUTÔT QUE l’état actuel du système 
• /! Co...
Un schéma plutôt que des mots… 
« Decide » Command Events 
« Apply » 
EventStore 
State 
Event Sourcing 
CQRS 
« Project »...
A vous de jouer… 
1. AggregateRoot Game, Command StartGame, Event GameStarted => 
« fonction Decide » + EventStore (stocka...
Feedback 
MERCI !
Quelques références 
En C# : https://github.com/gregoryyoung/m-r, 
En F# : https://github.com/thinkbeforecoding/FsUno, 
ht...
Prochain SlideShare
Chargement dans…5
×

20141021 - Coding dojo EventSourcing

615 vues

Publié le

Introduction du coding dojo Lyon du 21/10/2014 sur l'EventSourcing

Publié dans : Technologie
1 commentaire
0 j’aime
Statistiques
Remarques
  • Précision : les 'fonctions' 'Decide' et 'Apply' sont des noms stéréotypés. Pour les 'Decide' vous mettrez typiquement le verbe de l'action réalisée (ex: Start, PlayACard).

    Dans une implémentation objet, les 'fonctions' Decide sont typiquement une méthode de l'AggregateRoot Game (ex: Game.Start) et les 'fonctions' Apply sont des méthodes privées réalisant la modification de l'état de l'agrégat. L'état est interne à l'agrégat (encapsulation), i.e pas modifié en dehors des méthodes Apply privées..
    Nb: l'agrégat ne conserve que ce qui lui est nécessaire pour prendre des décisions ultérieures...
       Répondre 
    Voulez-vous vraiment ?  Oui  Non
    Votre message apparaîtra ici
  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
615
Sur SlideShare
0
Issues des intégrations
0
Intégrations
10
Actions
Partages
0
Téléchargements
4
Commentaires
1
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

20141021 - Coding dojo EventSourcing

  1. 1. Coding Dojo EventSourcing CARA Lyon – 21 octobre 2014 – Hébergé par l’INSA
  2. 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. 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. 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. 5. Un schéma plutôt que des mots… « Decide » Command Events « Apply » EventStore State Event Sourcing CQRS « Project » SGBD Query Base NoSQL
  6. 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…)
  7. 7. Feedback MERCI !
  8. 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 ?

×