Decouvrir CQRS (sans Event sourcing) par la pratique

ThomasPierrain 2,045 views 50 slides Oct 22, 2016
Slide 1
Slide 1 of 50
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50

About This Presentation

Introduction à CQRS présentée aux MS experiences 2016 (Palais des Congrès) par Thomas PIERRAIN, en compagnie de Bruno BOUCARD, Tomasz JASKULA et Eric VERNIE.


Slide Content

Thomas PIERRAIN
@tpierrain
Bruno BOUCARD
@brunoboucard
Tomasz JASKULA
@tjaskula
Eric VERNIE
@EricVernie
CQRS par
la pratique

PourquoiCQRS ?

Des problèmesde Scalabilité?
N°4

Loi de Pareto
80-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

Enmêmetemps…
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èsvous…)
N°8

C’estlà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

C
Q
R
S
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)

Command
DÉCLENCHE UNE ACTION
Modifie l’état du système
>> Ne retourne pas de donnée ! <<
Verbe a l’impératif
Ex: BookARoom
N°32
Query
RÉCUPÈRE UNE INFORMATION
Lecture-seule !
Retourne des données
Verbe a l’impératif
Ex: GetAvailableRooms
Event
A 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(Runtimed’exécution) (C++)
CoreFx(inclue les classes, collections, file systems, xmletc….) (C#)
Le Framework ASP.NET Core1.0s’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 cen’estpas…
N°43

Event Sourcing
Ce n’est pas non plus…
N°44

CQRS Event Sourcing
mais
CQRS != Event Sourcing
N°45

Doncvousl’aurezcompris…
N°46

… bien séparer son code de lecture et son code d’écriture
CQRS c’est surtout…
N°47
Queries
Caches, modèles
dénormalisés,
lecture-seule
Commands
Transactionnel
ACID

N°48
Merci aussi à Rui CARVALHO, Mendel MONTEIRO-BECKERMAN,
Olivier COANET etClément BOUDEREAU ainsi que Greg YOUNG
pour leurs feedbacks et idées pour ce talk.

Pour refaire le laba la
maison :
Suivez les instructions ici :
https://github.com/tpierrain/CQRS/blob/master/LabInstruc
tions.md

@microsoftfrance @Technet_France @msdev_fr
@tpierrain @brunoboucard @tjaskula @EricVernie
N°50

N°51

try
{
varuri = newUri("http://example.com/datalist.aspx");
varhttpClient= newHttpClient();
varresult = awaithttpClient.GetStringAsync(uri);
}
catch(Exceptione)
{
}
Exemple
de code
N°52