Skip to content

Dépôt support d'un atelier d'initiation aux architectures CQRS et à l'EventSourcing (AFUP)

License

Notifications You must be signed in to change notification settings

real34/cqrs-es-camboui

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Atelier CQRS / Event-Sourcing

... les mains dans le camboui

Contenu

Ce dépôt contient une base de code vous permettant de commencer à manipuler les concepts de l'event sourcing et des architectures CQRS.

Vous y trouverez :

  • des slides de présentation
  • un jeu de données à exploiter
  • une base d'application permettant de traiter une partie des données ... à compléter

Lancement initial

Ci-dessous les premières étapes pour commencer à se familiariser avec l'application :

  • make install (composer install)
  • make test (et / ou make spec)
  • make clear_event_store pour s'assurer de ne pas avoir de données en trop
  • Import d'un jeu de données (un jeu complet et 2 partiels sont disponibles):
    • cat data/2014_reserve_parlementaire_light_3.json | php -f src/Parlementaires/Infrastructure/Console/ImportRéserveParlementaire.php
    • make clear_event_store && cat data/2014_reserve_parlementaire_light_500.json | php -f src/Parlementaires/Infrastructure/Console/ImportRéserveParlementaire.php
    • make clear_event_store && zcat data/2014_reserve_parlementaire.json.zip | php -f src/Parlementaires/Infrastructure/Console/ImportRéserveParlementaire.php
  • Lancer l'application web make start

À compléter

Afin de comprendre les concepts voici quelques tâches à accomplir :

  • Ajouter une nouvelle information dans la projection TotauxParActeurProjector (ex: nombre de subventions accordées)
  • Ajouter une nouvelle projection pour connaître la répartition par bénéficiaire
  • Pour mieux traquer les bénéficiaires, il est important de pouvoir fusionner les subventions reçues par deux structures. Implémenter la gestion et les conséquences de la commande FusionnerBénéficiaires sur la projection que vous venez de créer. L'intégrer à l'application grâce à l'action fusionner_beneficiaires.php qui permet de déclencher la commande métier. Note : le rapprochement que vous venez d'implémenter dans la projection peut en fait avoir plusieurs raisons différentes, cela pourrait donc également avoir été implémenté avec deux commandes distinctes CorrigerFauteDeFrappe et RegrouperBénéficiaires

Pour approfondir les possibilités ouvertes, voici quelques tâches supplémentaires :

  • Implémenter \Parlementaires\Domain\ValueObject\IdProgramme::guardAgainstInvalidValue() de manière à détecter les données incorrectes, et/ou les corriger à la volée afin d'être plus tolérant aux erreurs
  • Que faudrait-il modifier pour pouvoir voir la répartition des subventions données par les Acteurs du Top 20 ? Facile à faire ?
  • Actuellement les projections ne "vivent pas" en temps réel car nous utilisons un "InMemoryRepository": que faudrait-il faire pour ne rejouer l'event store que lorsque nécessaire ? Implémentez cela avec un "FileBasedRepository"
  • (Avancé) En commençant par \Parlementaires\Domain\CommandHandler\RéserveParlementaire::handleAttribuerSubvention() et les ressources que vous trouverez en commentaire, ajoutez une couche de garantie de cohérence des données avec un agrégat racine (aggregate root) qui aura pour rôle de vérifier des règles métiers que vous définirez. Par exemple : seul un parlementaire en mandat peut faire des subventions, le montant des subventions ne peut dépasser xxx sur une année...

Ressources additionnelles

Pour aller plus loin, je vous recommande ces lectures :

Sources

Les jeux de données sont issus des sources suivantes :

Merci à ceu⋅x⋅lles qui permettent de rendre ces données accessibles !

TODO (pour étendre le volume de données)

About

Dépôt support d'un atelier d'initiation aux architectures CQRS et à l'EventSourcing (AFUP)

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published