Decouvrir CQRS (sans Event sourcing) par la pratique

Preview:

Citation preview

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