2015-09-05 1 views
4

Dois-je utiliser le modèle de requête pour combiner/vérifier certaines informations agrégées, comme dans un service de domaine? J'ai vu cela dans beaucoup d'exemples. Mais que se passe-t-il si les données de la requête sont propagées de manière asynchrone, à la suite d'un événement de domaine? Exemple: une carte de messages avec un agrégat utilisateur et un agrégat de message (découplé pour une frontière trx plus petite). Lorsqu'un utilisateur est marqué comme supprimé, tous ses messages doivent également être marqués-supprimés. Cela sera fait en gérant le UserMarkedDeletedEvent dans un type de service MessageEventHandler. Maintenant, ce service doit déclencher DeleteMessageCommands pour chaque message avec l'utilisateur spécifique. Afin de trouver les messages, une requête est requise. Je suppose que cela doit être fait sur le modèle en lecture, qui pourrait être obsolète en raison des mises à jour asynchrones ... (Je suppose que la seule option est le modèle de lecture/requête en cas d'Event Sourcing)Utilisation du modèle de requête dans les services de gestionnaire de commande/domaine

+0

Comment les messages sont-ils organisés? Font-ils partie de l'agrégat utilisateur? Ensuite, vous n'avez pas besoin de commandes, il suffit de prendre le UserMarkedDeletedEvent et le publier sur le modèle de lecture pour l'utilisateur et les messages de cet utilisateur –

Répondre

1

juste en cas de performance. Mais vous devriez savoir ce que vous demandez réellement au modèle lu et ce que cela signifie. En fonction de votre domaine, il peut y avoir des états qui ne changeront jamais ou qui ne reviendront jamais. Si vous demandez le modèle lu pour l'un de ces états, alors vous pouvez déclarer que c'est la vérité.

Mais avec cela, vous pouvez seulement indiquer qu'une commande est invalide ou peut-être valide. La vraie vérité est dans l'ensemble.

Exemple:

L'agrégat foo peut - une fois supprimé - jamais annuler la suppression (règle du domaine) et cet état est dans le modèle de lecture. Si vous obtenez cet état supprimé du modèle lu, alors vous pouvez dire qu'une commande - uniquement valable pour les foos non supprimés - n'est pas valide. Mais vous ne pouvez pas dire que c'est une commande valide, parce que l'agrégat est peut-être déjà supprimé et non écrit dans le modèle lu.

+0

Merci monsieur rufo, en effet le modèle de lecture n'est pas la vérité. J'ai ajouté un exemple pour montrer cela aussi. – Pepster