2016-02-08 4 views
1

J'ai le modèle de lecture Customer qui doit être mis à jour après NewOrderEvent. Une chose que je veux comprendre, dois-je mettre à jour mon modèle de lecture sur chaque événement. Ou j'ai besoin de rejouer tous les événements et de remplacer le modèle de lecture.Dois-je mettre à jour le modèle de lecture sur chaque événement

Que faire im est maintenant:

  1. Enregistrement NewOrderEvent
  2. Obtenir ou la création de modèle de lecture Customer
  3. Invoquer Customer.ApplyEvent(NewOrderEvent) qui change Customer état.
  4. Saving Customer lecture modèle

Suis-je manque quelque chose?

Répondre

7

Habituellement, vous voulez mettre à jour le modèle lu chaque fois que vous avez un événement. Mais, c'est juste une simple opération CRUD, une mise à jour db. La relecture des événements est effectuée lorsque vous voulez (re) générer un nouveau modèle de lecture, car vous pourriez avoir des millions d'événements et une opération très longue. Btw, la tâche d'application doit être réservée au modèle de commande uniquement, afin d'éviter toute confusion. Vous appliquez des événements à une racine d'agrégat de domaine (entité), mais vous utilisez un événement comme source de données pour les mises à jour de modèle de lecture.

+0

Merci. Pourriez-vous élaborer sur la partie "appliquer". De même, n'est-il pas possible que dans certains cas la racine d'agrégat de domaine soit réellement un modèle de lecture? –

+0

Si vous utilisez CQRS, un agrégat de domaine n'est jamais un modèle lu. Un modèle de lecture est juste un ensemble de structures de données adaptées pour interroger des scénarios. – MikeSW

+0

Ok, c'est toi. Merci –

1

Cela me semble bon. Vous pouvez décider de rejouer le flux d'événements afin de recréer le modèle lu uniquement si vous y introduisez quelque chose de nouveau.

Certaines personnes reconstruisent des modèles de lecture chaque fois que le schéma change, mais dans de nombreux cas, vous pouvez utiliser des migrations pour cela. Vraiment dépend de votre application.