C'est projet qui repose sur le Pattern CQRS et Event Sourcing
CQRS, pour Command Query Responsibility Segregation est une architecture logiciel qui repose sur un principe simple : la séparation, au sein d’une application, des composants de modification et de restitution de l’information sous les termes Command (pour l’écriture) et Query (pour la lecture).
CQRS signifie Command Query Responsibility Segregation, ce qui signifie Séparation des Responsabilités de Commande et de Requête. C'est un patron de conception qui consiste à séparer les responsabilités de modification d'état (commandes) et de lecture d'état (requêtes) dans une application.
L'idée derrière CQRS est de séparer les responsabilités de modification et de lecture en utilisant deux modèles de données distincts. Le modèle de commande est utilisé pour effectuer des modifications d'état, tandis que le modèle de requête est utilisé pour lire l'état. Cela peut être utile dans les cas où l'application a un grand nombre de lectures d'état par rapport aux modifications d'état, car cela permet de mieux optimiser les deux modèles de données pour leurs usages respectifs.
Event sourcing consiste à enregistrer tous les événements qui ont eu lieu dans l'application dans une séquence chronologique, plutôt que de simplement enregistrer l'état actuel de l'application. Cela permet de conserver une trace complète de l'historique de l'application et de reconstituer l'état actuel à partir de ces événements.
L'utilisation conjointe de CQRS et de l'event sourcing peut être utile dans les cas où il est important de pouvoir reconstituer l'état de l'application à des points précis dans le temps et de disposer d'une vue complète de l'historique des événements qui ont conduit à l'état actuel de l'application.
Le modèle de commande dans CQRS est chargé de recevoir et de traiter les commandes, c'est-à-dire les actions qui modifient l'état de l'application. Une commande est généralement représentée par une structure de données contenant les informations nécessaires pour effectuer l'action.
Le modèle de requête dans CQRS est chargé de fournir des données à l'utilisateur ou à d'autres parties du système. Il s'agit généralement d'un modèle de données optimisé pour la lecture et qui permet d'accéder rapidement aux données nécessaires.