Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CQRS à la rescousse de PrestaShop pour migrer vers Symfony

CQRS à la rescousse de PrestaShop pour migrer vers Symfony

Migrer une application d'un framework maison vers Symfony est devenu un classique dans le monde PHP. L'équipe PrestaShop a commencé une telle migration en 2016 avec la difficulté supplémentaire que l'application est un CMS open source PHP fondé en 2007.

Le chantier est immense, et nous procédons donc par étapes. C'est ici que l'introduction de CQRS dans notre architecture nous a grandement aidé à mettre en place une communication efficace entre les composants migrés et les composants legacy. Cette frontière est flexible et permet de remplacer un à un les composants legacy par des composants modernes avec une grande facilité.

Plutôt que de présenter CQRS qui a déjà été introduit, étudié et décrit par de nombreuses autre conférences, je propose d'aborder "le vif du sujet": les difficultés, les pièges, les erreurs que nous avons commises ... et (heureusement) les résultats positifs amenés par l'usage de CQRS.

Mathieu Ferment

May 28, 2021
Tweet

Other Decks in Technology

Transcript

  1. Bonjour! Mathieu Ferment Senior Developer @ PrestaShop Développeur PHP depuis

    2012 PrestaShop depuis 2018 En charge de la migration vers 2 @matks @mathieuKs
  2. @matks Sommaire 3 CQRS à la rescousse de PrestaShop pour

    migrer vers Symfony 1. Choisir CQRS 2. Implémenter CQRS en PHP 3. Retours d’expérience
  3. @matks 6 CQRS en 3 slides Commands: - FaireUnVirement -

    OuvrirUnLivret - MettreAJourMonAdresse - ... Queries: - ConsulterMonSolde - ConsulterMonAdresse - ConsulterMonRIB - ...
  4. @matks 7 CQRS en 3 slides CQRS Command Query Responsibility

    Segregation Commands: - FaireUnVirement - OuvrirUnLivret - MettreAJourMonAdresse - ... Queries: - ConsulterMonSolde - ConsulterMonAdresse - ConsulterMonRIB - ...
  5. @matks A propos de PrestaShop: migration vers Symfony 11 En

    2016, PrestaShop migre son architecture vers Symfony
  6. @matks A propos de PrestaShop: migration vers Symfony 12 1.

    La couche applicative 2. La couche modèle Migration en 2 étapes
  7. @matks 15 CQRS Application Migration étape 1 Domaine Migration étape

    2 CQRS Command Query Responsibility Segregation
  8. @matks Retour 1 29 “Un usecase = une Command ou

    une Query” + un Bus + un Handler
  9. @matks Retour 1 30 “Un usecase = une Command ou

    une Query” + un Bus + un Handler + des ValueObject
  10. @matks Retour 1 31 “Un usecase = une Command ou

    une Query” + un Bus + un Handler + des ValueObject + des DomainExceptions
  11. @matks Retour 1 32 “Un usecase = une Command ou

    une Query” + un Bus + un Handler + des ValueObject + des DomainExceptions + des DTO
  12. @matks Retour 1: plein de fichiers 33 “Un usecase =

    une Command ou une Query” + un Bus + un Handler + des ValueObject + des DomainExceptions + des DTO
  13. @matks Retour 2: appliquer CQRS globalement 35 “Like any pattern,

    CQRS is useful in some places, but not in others. [...] CQRS is a significant mental leap for all concerned, so shouldn't be tackled unless the benefit is worth the jump.” Martin Fowler https://martinfowler.com/bliki/CQRS.html
  14. @matks 37 Retour 4: Une Command, ça ne retourne rien

    CQRS nous dit: “Commands: Change the state of a system but do not return a value.”
  15. @matks 38 Retour 4: Une Command, ça ne retourne rien

    “Commands: Change the state of a system but do not return a value.”
  16. @matks 39 Retour 4: Une Command, ça ne retourne rien

    CQRS nous dit: “Commands: Change the state of a system but do not return a value.” Finalement on a choisi: “The ‘no return on success’ rule can be broken when creating entities.”
  17. En résumé 49 1. CQRS c’est un investissement 2. Ne

    pas appliquer CQRS partout 3. Être pragmatique sur le découpage en Queries 4. Le concept de Command est dur à suivre 100% 5. Se doter des outils pour faciliter la maintenance