SlideShare une entreprise Scribd logo
#DevoxxFR
Devoxx France 2017
CQRS / Event Sourcing
FROM SCRATCH
Florent Pellet @florentpellet
Emilien Pecoul @ouarzy
1
#DevoxxFR
Emilien Pecoul Florent Pellet
Épanouir les développeurs
grâce au freelance
#DevoxxFR
www.slido.com
#4242
www.slido.com #4242
#DevoxxFR
Mixter = Twitter
Fonctionnalités:
Tweet => Quack
Retweet => Requack
Like
Delete
Afficher quacks sur Timeline
www.slido.com #4242
#DevoxxFR
Mixter = Twitter
www.slido.com #4242
#DevoxxFR
Modèle de Données
www.slido.com #4242
#DevoxxFR
Architecture
Controller
Métier
Modèle
Base de
données
Vue
www.slido.com #4242
#DevoxxFR
CRUD
www.slido.com #4242
#DevoxxFR
Limites Techniques
Grappe d’objets (lazy loading)
Montée en charge ? (cache)
www.slido.com #4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Limites Métier
Oubli de Fonctionnalité ...
Mémoriser l’annulation de like
www.slido.com #4242
#DevoxxFR
Limites Métier
Modifier la table de liaison
Données exploitables dans 6 mois
www.slido.com #4242
#DevoxxFR
Limites Métier
www.slido.com #4242
#DevoxxFR
Limites Métier
www.slido.com #4242
#DevoxxFR
Et encore...
Pas requack, ni de requack de
requack (plus de liaisons)
www.slido.com #4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Et encore...
Problème de fond :
Comment représenter le temps dans
un modèle statique ?
Tout projet « simple » augmente
exponentiellement en complexité
www.slido.com #4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Approche événementielle
Temps
Quacked Liked
Like
cancelled
Liked DeletedRequacked
www.slido.com #4242
#DevoxxFR
Approche événementielle
Temps
Quacked Liked
Like
cancelled
Liked DeletedRequacked
Event Sourcing
On stock des événements (comportement) au lieu d’un état
www.slido.com #4242
#DevoxxFR
Utilisateur Command Application
Event Sourcing
www.slido.com #4242
#DevoxxFR
Utilisateur Command
Application
Décisions
Event Sourcing
www.slido.com #4242
#DevoxxFR
Utilisateur Command
Application
EventsDécision
Event Sourcing
www.slido.com #4242
#DevoxxFR
Utilisateur Command’
Application
Events
Décision
Historique
Event Sourcing
www.slido.com #4242
#DevoxxFR
Temps
Quacked Liked
Like
cancelled
Liked
Like
cancelled
Liked
IsLiked ?
www.slido.com #4242
#DevoxxFR
Temps
Quacked Liked
Like
cancelled
Liked
Like
cancelled
Liked
IsLiked ?
truefalse
www.slido.com #4242
#DevoxxFR
Quacked Liked
Like
cancelled
Liked
Like
cancelled
Liked
IsLiked ?
falsetruefalse
Temps
www.slido.com #4242
#DevoxxFR
Temps
Quacked Liked
Like
cancelled
Liked
Like
cancelled
Liked
IsLiked ?
truefalsetruefalse
www.slido.com #4242
#DevoxxFR
Quacked Liked
Like
cancelled
Liked
Like
cancelled
Liked
true false
IsLiked ?
falsetruefalse
Temps
www.slido.com #4242
#DevoxxFR
Temps
Quacked Liked
Like
cancelled
Liked
Like
cancelled
Liked
IsLiked ?
true falsefalsetruefalse true
www.slido.com #4242
#DevoxxFR
Utilisateur Command’
Application
Events
Décision
Historique
Projection
Event Sourcing
www.slido.com #4242
#DevoxxFR
Event Sourcing
Copyright: Jérémie Chassaing
www.slido.com #4242
#DevoxxFR
www.slido.com
#4242
#DevoxxFR
Utilisateur
Command
Application
EventsDécision
CQRS
Visualisation
Query
www.slido.com #4242
#DevoxxFR
Utilisateur
Command
Application
EventsDécision Events
Store
CQRS
Visualisation
Query
Read
model
store
www.slido.com #4242
#DevoxxFR
Utilisateur
Command
Application
EventsDécision Events
Store
CQRS
Visualisation
Query
Read
model
store
Projection
www.slido.com #4242
#DevoxxFR
CQRS
Sépare le chemin d’écriture (événements), du chemin de
lecture (état à un instant T)
Projette les événements dans un modèle de lecture
Réduit la complexité (SRP)
www.slido.com #4242
#DevoxxFR
#DevoxxFR
CQRS
Copyright: Alberto Brandolini
www.slido.com #4242
#DevoxxFR
www.slido.com
#4242
#DevoxxFR
EventStorming
www.slido.com #4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Un mot sur le DDD
www.slido.com #4242
#DevoxxFR
Ubiquitous Language
www.slido.com #4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Value Object
www.slido.com #4242
#DevoxxFR
Entity
Paul Jack
www.slido.com #4242
#DevoxxFR
Personne
Aggregate
●Garantie le côté atomique de ses informations
●Composé d’entities et de values objects
Adresse Nom Prenom
www.slido.com #4242
#DevoxxFR
Bounded Context
Sales Context
Support Context
www.slido.com #4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Limites
www.slido.com #4242
#DevoxxFR
Limites
www.slido.com #4242
#DevoxxFR
www.slido.com
#4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Mais tout de suite
Pause !
…
Réflexion
…
Session Questions
www.slido.com #4242
#DevoxxFR
www.slido.com
#4242
#DevoxxFR www.slido.com #4242
#DevoxxFR
Copyright: Jérémie Chassaing
www.slido.com #4242
#DevoxxFR
Copyright: Alberto Brandolini
www.slido.com #4242
#DevoxxFR
www.slido.com
#4242
#DevoxxFR
MERCI !
31
Florent Pellet @florentpellet
Emilien Pecoul @ouarzy
Workshop
Agilité par le code grâce à CQRS et EventSourcing
(13h30)
Formation de 2 jours :
Implémenter DDD avec
CQRS / Event Sourcing
le 8/9 juin
http://bit.ly/2oxJonu

Contenu connexe

Similaire à Université EventSourcing CQRS Devoxx fr 2017

Comprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications SparkComprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications Spark
Raphael Luta
 
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-readyDevoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Alexander DEJANOVSKI
 
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Audrey Neveu
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Publicis Sapient Engineering
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
Thibaut Marmin
 
TIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisationTIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisation
The Incredible Automation Day
 
Devoxx 17 - CQRS/EventSourcing par la pratique
Devoxx 17 - CQRS/EventSourcing par la pratiqueDevoxx 17 - CQRS/EventSourcing par la pratique
Devoxx 17 - CQRS/EventSourcing par la pratique
Publicis Sapient Engineering
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
Publicis Sapient Engineering
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
Publicis Sapient Engineering
 
Java (8) eXperiments - DevoxxFR 2016
Java (8) eXperiments - DevoxxFR 2016Java (8) eXperiments - DevoxxFR 2016
Java (8) eXperiments - DevoxxFR 2016
François Sarradin
 
Communiquer en BLE: Les pièges à éviter !
Communiquer en BLE: Les pièges à éviter !Communiquer en BLE: Les pièges à éviter !
Communiquer en BLE: Les pièges à éviter !
Alexis DUQUE
 
Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...
Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...
Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...
Neo4j
 
Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?
Microsoft
 
Architecture Decision Record - Le chaînon manquant
Architecture Decision Record - Le chaînon manquantArchitecture Decision Record - Le chaînon manquant
Architecture Decision Record - Le chaînon manquant
Sylvain AURAT
 
Les Cast Codeurs à Devoxx Belgique 2013
Les Cast Codeurs à Devoxx Belgique 2013Les Cast Codeurs à Devoxx Belgique 2013
Les Cast Codeurs à Devoxx Belgique 2013
emmanuelbernard
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
Jean-Marie Renouard
 
Sécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentielSécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentiel
Microsoft Décideurs IT
 
Sécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentielSécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentiel
Microsoft Technet France
 
Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015
Romain Linsolas
 
Gestion des drifts Terraform avec la méthode GitOps
Gestion des drifts Terraform avec la méthode GitOpsGestion des drifts Terraform avec la méthode GitOps
Gestion des drifts Terraform avec la méthode GitOps
Katia HIMEUR TALHI
 

Similaire à Université EventSourcing CQRS Devoxx fr 2017 (20)

Comprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications SparkComprendre et maîtriser la performance de ses applications Spark
Comprendre et maîtriser la performance de ses applications Spark
 
Devoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-readyDevoxx 2016 - Dropwizard : Création de services REST production-ready
Devoxx 2016 - Dropwizard : Création de services REST production-ready
 
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
Ionic, le framework mobile hybride carrément addictif - Devoxx France 2016
 
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveurXebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
Xebicon'18 - Spark in jail : conteneurisez vos traitements data sans serveur
 
Docker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à DockerDocker Tours Meetup #1 - Introduction à Docker
Docker Tours Meetup #1 - Introduction à Docker
 
TIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisationTIAD : Choisir et construire son projet d’automatisation
TIAD : Choisir et construire son projet d’automatisation
 
Devoxx 17 - CQRS/EventSourcing par la pratique
Devoxx 17 - CQRS/EventSourcing par la pratiqueDevoxx 17 - CQRS/EventSourcing par la pratique
Devoxx 17 - CQRS/EventSourcing par la pratique
 
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
XebiCon'16 : NodeJS x Craftsmanship - Comment faire un projet dans les règles...
 
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services  Par Al...
XebiCon'16 : Choisissez votre style avec Docker & Amazon Web Services Par Al...
 
Java (8) eXperiments - DevoxxFR 2016
Java (8) eXperiments - DevoxxFR 2016Java (8) eXperiments - DevoxxFR 2016
Java (8) eXperiments - DevoxxFR 2016
 
Communiquer en BLE: Les pièges à éviter !
Communiquer en BLE: Les pièges à éviter !Communiquer en BLE: Les pièges à éviter !
Communiquer en BLE: Les pièges à éviter !
 
Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...
Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...
Neo4j & Prisme.ai : Interrogez vos données connectées en langage naturel avec...
 
Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?Quand GIT rencontre TFS, que peut-on en attendre ?
Quand GIT rencontre TFS, que peut-on en attendre ?
 
Architecture Decision Record - Le chaînon manquant
Architecture Decision Record - Le chaînon manquantArchitecture Decision Record - Le chaînon manquant
Architecture Decision Record - Le chaînon manquant
 
Les Cast Codeurs à Devoxx Belgique 2013
Les Cast Codeurs à Devoxx Belgique 2013Les Cast Codeurs à Devoxx Belgique 2013
Les Cast Codeurs à Devoxx Belgique 2013
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
 
Sécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentielSécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentiel
 
Sécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentielSécurité Active Directory: Etablir un référentiel
Sécurité Active Directory: Etablir un référentiel
 
Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015Devoxx France 2015 - Développement web en 2015
Devoxx France 2015 - Développement web en 2015
 
Gestion des drifts Terraform avec la méthode GitOps
Gestion des drifts Terraform avec la méthode GitOpsGestion des drifts Terraform avec la méthode GitOps
Gestion des drifts Terraform avec la méthode GitOps
 

Plus de Emilien Pecoul

Lancer sa carrière en Freelance
Lancer sa carrière en FreelanceLancer sa carrière en Freelance
Lancer sa carrière en Freelance
Emilien Pecoul
 
Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?
Emilien Pecoul
 
Event Modeling by Example
Event Modeling by ExampleEvent Modeling by Example
Event Modeling by Example
Emilien Pecoul
 
Daily ddd
Daily dddDaily ddd
Daily ddd
Emilien Pecoul
 
Developer entropy
Developer entropyDeveloper entropy
Developer entropy
Emilien Pecoul
 
The software evolution hasn't happened yet
The software evolution hasn't happened yetThe software evolution hasn't happened yet
The software evolution hasn't happened yet
Emilien Pecoul
 
Event storming
Event stormingEvent storming
Event storming
Emilien Pecoul
 
Pourquoi les evenements sont importants
Pourquoi les evenements sont importantsPourquoi les evenements sont importants
Pourquoi les evenements sont importants
Emilien Pecoul
 
Code retreat
Code retreatCode retreat
Code retreat
Emilien Pecoul
 
Bref
BrefBref
Mocks vs stubs
Mocks vs stubsMocks vs stubs
Mocks vs stubs
Emilien Pecoul
 

Plus de Emilien Pecoul (12)

Lancer sa carrière en Freelance
Lancer sa carrière en FreelanceLancer sa carrière en Freelance
Lancer sa carrière en Freelance
 
Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?Consultant: la vie de freelance est elle faite pour moi ?
Consultant: la vie de freelance est elle faite pour moi ?
 
Event Modeling by Example
Event Modeling by ExampleEvent Modeling by Example
Event Modeling by Example
 
Daily ddd
Daily dddDaily ddd
Daily ddd
 
Developer entropy
Developer entropyDeveloper entropy
Developer entropy
 
The software evolution hasn't happened yet
The software evolution hasn't happened yetThe software evolution hasn't happened yet
The software evolution hasn't happened yet
 
Event storming
Event stormingEvent storming
Event storming
 
Pourquoi les evenements sont importants
Pourquoi les evenements sont importantsPourquoi les evenements sont importants
Pourquoi les evenements sont importants
 
Code retreat
Code retreatCode retreat
Code retreat
 
Bref
BrefBref
Bref
 
Mocks vs stubs
Mocks vs stubsMocks vs stubs
Mocks vs stubs
 
Mieux secomprendrebdd
Mieux secomprendrebddMieux secomprendrebdd
Mieux secomprendrebdd
 

Université EventSourcing CQRS Devoxx fr 2017

Notes de l'éditeur

  1. un modèle qui représente la vérité => primaire c’est les événements Les deux bases ne sont pas obligatoires
  2. Changement de mentalité => état vers comportement
  3. navigabilité