2017-09-18 4 views
1

Je travaille actuellement sur un projet où l'approvisionnement d'événements est utilisé. C'est ma première expérience avec ES donc parfois je ne sais pas si l'approche que j'utilise pour résoudre certains problèmes est correcte ou non.Source d'événements: approche correcte pour ignorer les événements

Considérez ce scénario: J'ai une interface utilisateur basée sur les tâches où chaque action produit une commande, qui crée un ou plusieurs événements.

À un certain point, l'utilisateur peut démarrer un processus, en disant qu'un événement appelé ProcessStarted est généré. De là, il sera capable de faire des changements à l'agrégat, produisant ainsi d'autres événements.

Il peut continuer, ou, s'il le souhaite, il peut rétablir l'état de l'agrégat lors du dernier événement avant de démarrer le processus mentionné ci-dessus, à savoir qu'un événement appelé ProcessReverted est généré.

Si le processus est restauré, il est possible d'effectuer davantage d'opérations sur l'agrégat, mais les événements ayant concouru dans le processus depuis les événements ProcessStarted jusqu'aux événements ProcessReverted ne doivent pas être pris en compte.

Par conséquent, lorsque l'agrégat est réhydratée Je veux:

  • tous les événements depuis le début du temps à prendre en considération; Tous les événements du ProcessStarted aux événements ProcessReverted à ignorer;
  • tous les événements après les événements ProcessReverted à prendre en considération.

Quelle est la meilleure approche pour atteindre mon objectif? Je ne peux pas penser à une solution qui serait élégante et appropriée dans un contexte ES. Je ne poste aucun code ici parce que je ne cherche pas de détails de mise en œuvre, mais je cherche une stratégie, j'espère obtenir des conseils de personnes avec plus d'expérience que moi et j'espère que ce serait aide-moi à mieux comprendre comment tirer parti de la puissance et de la flexibilité des SE.

Répondre

2

Vous devriez le faire à l'intérieur de votre agrégat, en stockant un instantané de l'état chaque fois qu'un événement ProcessStarted est appliqué; Lorsque le ProcessReverted est appliqué, l'état entier est remplacé par celui enregistré dans l'instantané. Ceci est simple car les événements sont toujours appliqués dans l'ordre dans lequel ils ont été émis. Donc, il n'y a pas besoin d'un composant externe ou d'un service d'infrastructure, c'est juste une logique d'agrégat interne.

+0

J'ai fait exaclty comment vous avez suggéré. Cela semble être la solution la plus logique. Merci – user449689

+0

@ user449689 vous êtes les bienvenus! –