Download - Présentation CQRS à DevoxxFr
![Page 1: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/1.jpg)
1
CQRSdid you mean CARS ?
Jérémie Chassaing@thinkb4coding
![Page 2: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/2.jpg)
2
Ce qui vous attend
• Et si on s’était compliqué la vie avec l’archi 3 tiers ?
• Reprenons les questions à la base avec CQRS
• Redécouvrons la simplicité et la clarté
• Démultiplions nos options de choix architecturaux
![Page 3: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/3.jpg)
3
Speaker
• http://thinkbeforecoding.com
• @thinkb4coding
• Architecte chez Siriona
• Membre du Advisory Board CQRS au près du groupe Patterns & Practices de Microsoft
![Page 4: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/4.jpg)
4
Les bonnes pratiques
Commençons par
![Page 5: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/5.jpg)
5
Architecture 3 tiers
Présentation
Objets métiers
Base de données
![Page 6: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/6.jpg)
6
Architecture 3 tiers
• Chargements à la demande
• Prefetch paths ou SELECT 1+N
• ORMs
• Cache
![Page 7: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/7.jpg)
7
Est-ce qu’on ne se complique
pas un peu la vie ?
On est en droit de se demander:
![Page 8: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/8.jpg)
8
CQRSCommand/Query
Responsibility Segregation
CQS au niveau architectural
![Page 9: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/9.jpg)
9
Vue d’ensembles
Présentation
DomaineEcriture seule
Modèle delecture
Requête
s
Com
mandes
Evénements
![Page 10: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/10.jpg)
10
Coté requêtes
Vue Vue
Modèle de vue
persistantModèle de vue
persistant
Requête Réponse
![Page 11: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/11.jpg)
11
Coté commandes
Vue
Service métierDomaine
Commandes
![Page 12: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/12.jpg)
12
Intégration• Vues SQL
• Map reduce sur une base de documents
• Projections d’un flux d’evenements
• Toute autre solution adéquate !
![Page 13: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/13.jpg)
13
Vue d’ensembles
Présentation
DomaineEcriture seule
Modèle delecture
Requête
s
Com
mandes
Evénements
![Page 14: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/14.jpg)
14
Est-ce vraiment plus simple ?
A ce niveau là on peut se demander :
![Page 15: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/15.jpg)
15
Deux modèles pour deux besoins
Requetes : Model de vue persistant
• Un model par vue
• Modèles dénormalisés
• Suit les relations entre objets/contextes
Commandes : Model transactionnel
• Un modèle par agrégat
• Respect strict des limites transactionnelles des agrégats
• Pas de relations
![Page 16: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/16.jpg)
16
Deux modeles pour deux besoins
• Choix indépendants des systèmes de persistance
• Plus de chargements à la demande (lazy loads)
• Donc plus de prefetch path
![Page 17: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/17.jpg)
17
Choix du stockage en 3tiers• SQL, parce que c’est ce que tout le monde utilise.
• Document Store, c’est sympa, mais on peux pas croiser les données.
![Page 18: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/18.jpg)
18
Choix du stockage avec CQRSCoté requêtes
• SQL (avec ORM/Micro ORM ou sans ORM)
• Key Value store
• Document Store
• Projections en mémoire
• Cube OLAP
• Ce qui vous convient !
Coté commandes
• SQL + ORM
• Document Store
• Event Store
• Là aussi, écoutez vos besoins et vos contraintes !
![Page 19: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/19.jpg)
19
Plus de cache• On cache les requêtes qui prennent du temps à calculer
• Mais quand doit on rafraichir le cache ?
• Quand la donnée change !
![Page 20: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/20.jpg)
20
Montée en chargeCoté requêtes : Balance de charge Coté commandes : Sharding
![Page 21: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/21.jpg)
21
Quand utiliser CQRS ?
![Page 22: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/22.jpg)
22
Quand utiliser CQRS
• A l’intérieur d’un contexte délimité
• Dans les environnements fortement concurrents
• Lorsque les modèles de lecture et d’écriture sont différents
• Pour rendre explicite la fraicheur et l’obsolescence des données
![Page 23: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/23.jpg)
23
Quand ne PAS utiliser CQRS
• Au plus haut niveau du système
• Dans les environnements purement CRUD
• Quand les modèles de lecture et d’écriture sont identiques
![Page 24: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/24.jpg)
24
ConclusionEt oui, déjà…
![Page 25: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/25.jpg)
25
Conclusion
• CQRS amène de la clarté en découplant les problématiques
• CQRS permet d’éviter certains problèmes récurrents
• CQRS peut être implémenté dans un contexte isolé
• CQRS propose un choix ouvert d’implémentations
• CQRS peut cohabiter simplement avec les contextes existants
![Page 26: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/26.jpg)
26
Conclusion
• Arrêtez de vous compliquer la vie
• Utilisez CQRS dès aujourd’hui !
• Plus d’info sur github.com/mspnp
![Page 27: Présentation CQRS à DevoxxFr](https://reader033.vdocuments.pub/reader033/viewer/2022052905/55865fd7d8b42aa9308b46eb/html5/thumbnails/27.jpg)
27
Questions ?