Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Decouvrir CQRS (sans Event sourcing) par la pratique

1,082 views

Published on

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.

Published in: Software
  • Be the first to comment

Decouvrir CQRS (sans Event sourcing) par la pratique

  1. 1. Thomas PIERRAIN @tpierrain Bruno BOUCARD @brunoboucard Tomasz JASKULA @tjaskula Eric VERNIE @EricVernie CQRS par la pratique
  2. 2. Pourquoi CQRS ?
  3. 3. Des problèmes de Scalabilité ? N° 4
  4. 4. Loi de Pareto 80-20 Le coupable… N° 5 0%0% 80% de lecture 20% d’écriture
  5. 5. Des contraintes très différentes à gérer par le même composant central donc … En même temps… N° 6
  6. 6. Tenez-en vous suffisamment compte dans vos choix de design et d’architecture ? Question (pour vous) N° 7
  7. 7. Comment optimiser une appli qui a besoin de monter à l’échelle ? Et alors (d’après vous…) N° 8
  8. 8. C’est là où CQRS… N° 9
  9. 9. CQRS (version courte)
  10. 10. CQRS sépare les 80 et les 20 N° 11
  11. 11. CQRS sépare les 80 et les 20 N° 12 20 % du temps 80 % du temps
  12. 12. C Q R S Et au fait ?!? ( powered by Greg YOUNG - @gregyoung ) N° 13
  13. 13. Command Query Responsibility Segregation Et au fait ?!? N° 14
  14. 14. Command Query Responsibility Segregation Et au fait ?!? N° 15
  15. 15. N° 16 Le petit CQRS illustré
  16. 16. N° 17 Le petit CQRS illustré
  17. 17. N° 18 Le petit CQRS illustré
  18. 18. N° 19 Le petit CQRS illustré
  19. 19. N° 20 Le petit CQRS illustré
  20. 20. N° 21 Le petit CQRS illustré
  21. 21. N° 22 Le petit CQRS illustré
  22. 22. N° 23 Le petit CQRS illustré
  23. 23. N° 24 Le petit CQRS illustré
  24. 24. N° 25 Le petit CQRS illustré
  25. 25. N° 26 Le petit CQRS illustré
  26. 26. N° 27 Le petit CQRS illustré
  27. 27. N° 28 Le petit CQRS illustré
  28. 28. N° 29 Le petit CQRS illustré
  29. 29. N° 30 Le petit CQRS illustré
  30. 30. Le petit CQRS illustré N° 31 Bases de données relationnelles (ACID) Caches, modèles dénormalisés, « prêts à «consommer » (no SQL)
  31. 31. 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
  32. 32. Démo
  33. 33. 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.
  34. 34. N° 37
  35. 35. Live coding
  36. 36. Pour conclure…
  37. 37. Attention ! N° 42
  38. 38. …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
  39. 39. Event Sourcing Ce n’est pas non plus… N° 44
  40. 40. CQRS Event Sourcing mais CQRS != Event Sourcing N° 45
  41. 41. Donc vous l’aurez compris… N° 46
  42. 42. … 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
  43. 43. 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.
  44. 44. Pour refaire le lab a la maison : Suivez les instructions ici : https://github.com/tpierrain/CQRS/blob/master/LabInstruc tions.md
  45. 45. @microsoftfrance @Technet_France @msdev_fr @tpierrain @brunoboucard @tjaskula @EricVernie N° 50
  46. 46. N° 51
  47. 47. try { var uri = new Uri("http://example.com/datalist.aspx"); var httpClient = new HttpClient(); var result = await httpClient.GetStringAsync(uri); } catch (Exception e) { } Exemple de code N° 52

×