decouvrir cqrs (sans event sourcing) par la pratique
TRANSCRIPT
Thomas PIERRAIN@tpierrain
Bruno BOUCARD@brunoboucard
Tomasz JASKULA@tjaskula
Eric VERNIE@EricVernie
CQRS par la pratique
Pourquoi CQRS ?
Des problèmes de Scalabilité ?
N° 4
Loi de Pareto80-20
Le coupable…
N° 5
0%0%
80% de lecture
20% d’écriture
Des contraintes très différentes à
gérer par le même composant
central
donc…
En même temps…
N° 6
Tenez-en vous suffisamment compte dans vos choix de design et d’architecture ?
Question(pour vous)
N° 7
Comment optimiser une appli qui a besoin de monter à l’échelle ?
Et alors(d’après vous…)
N° 8
C’est là oùCQRS…
N° 9
CQRS (version courte)
CQRS sépare les 80 et les 20
N° 11
CQRS sépare les 80 et les 20
N° 12
20 % du temps
80 % du temps
CQRS
Et au fait ?!?( powered by Greg YOUNG - @gregyoung )
N° 13
Command
Query
Responsibility
Segregation
Et au fait ?!?
N° 14
Command
Query
Responsibility
Segregation
Et au fait ?!?
N° 15
N° 16
Le petit CQRS illustré
N° 17
Le petit CQRS illustré
N° 18
Le petit CQRS illustré
N° 19
Le petit CQRS illustré
N° 20
Le petit CQRS illustré
N° 21
Le petit CQRS illustré
N° 22
Le petit CQRS illustré
N° 23
Le petit CQRS illustré
N° 24
Le petit CQRS illustré
N° 25
Le petit CQRS illustré
N° 26
Le petit CQRS illustré
N° 27
Le petit CQRS illustré
N° 28
Le petit CQRS illustré
N° 29
Le petit CQRS illustré
N° 30
Le petit CQRS illustré
Le petit CQRS illustré
N° 31
Bases de
données
relationnelles
(ACID)
Caches, modèles
dénormalisés,
« prêts à
«consommer »
(no SQL)
CommandDÉCLENCHE UNE ACTION
Modifie l’état du système
>> Ne retourne pas de donnée ! <<
Verbe a l’impératif
Ex: BookARoom
N° 32
QueryRÉCUPÈRE UNE INFORMATION
Lecture-seule !
Retourne des données
Verbe a l’impératif
Ex: GetAvailableRooms
EventA DÉJÀ EU LIEU
(Immutable)
Verbe au participe passé
Ex: RoomBooked
Démo
Implémentation Open Source disponible sur GitHub
Constitué de deux parties
CoreClr (Runtime d’exécution) (C++)
CoreFx (inclue les classes, collections, file systems, xml etc….) (C#)
Le Framework ASP.NET Core 1.0 s’appuie dessus
Déploiement classique ou
Containers (Linux ou Windows)
.NET Core// Licensed to the .NET Foundation under one or more agreements.
N° 37
Live coding
Pour conclure…
Attention !
N° 42
…un pattern général d’architecture
Utilisez-le pour les composants soumis à rude épreuve (perf)
Et uniquement sur une sous-partie de votre plate-forme par exemple
CQRS ce n’est pas…
N° 43
Event Sourcing
Ce n’est pas non plus…
N° 44
CQRS Event Sourcing
mais
CQRS != Event Sourcing
N° 45
Donc vous l’aurez compris…
N° 46
… bien séparer son code de lecture et son code d’écriture
CQRS c’est surtout…
N° 47
QueriesCaches, modèles
dénormalisés, lecture-seule
CommandsTransactionnel
ACID
N° 48
Merci aussi à Rui CARVALHO, Mendel MONTEIRO-BECKERMAN,
Olivier COANET et Clément BOUDEREAU ainsi que Greg YOUNG pour leurs feedbacks et idées pour ce talk.
Pour refaire le lab a la maison :
Suivez les instructions ici :
https://github.com/tpierrain/CQRS/blob/master/LabInstructions.md
@microsoftfrance @Technet_France @msdev_fr
@tpierrain @brunoboucard @tjaskula @EricVernie
N° 50
N° 51
try
{
var uri = new Uri("http://example.com/datalist.aspx");
var httpClient = new HttpClient();
var result = await httpClient.GetStringAsync(uri);
}
catch (Exception e)
{
}
Exemplede code
N° 52