7
votes

Validation des CQRS et unicité

Dans mon architecture CQRS, j'aimerais valider que lorsque j'envoie un insertSettingCommand (paramètre est un objet clé / valeur), je veux vérifier que la clé n'existe pas déjà dans ma base de données. Si je comprends bien les CQRS et la validation, il est indiqué que la validation doit être effectuée au côté du client uniquement lorsqu'il s'agit de vérifier certaines des trucs de formatage comme la vérification de ce courrier électronique respecte une syntaxe ou que le nom du client n'est pas vide. Mais dans mon cas, je dois interroger ma base de données pour voir si elle existe, mais je ne sais pas s'il est correct d'interroger mon magasin de lecture au client? Ou devrais-je appeler mon magasin de lecture au côté de mon domaine? Ensuite, jette un événement d'insertionDupliquée?

Alors, quelle est la meilleure approchoch de prendre ma situation dans un environnement de la CQRS? Certaines personnes parlent d'actions de compensation? Est-ce quelque chose qui peut m'aider?

Merci.


0 commentaires

3 Réponses :


9
votes

Il est correct de faire la requête du côté client pour lire le stockage afin de valider l'unicité. Voici Certaines pensées de Greg Young à propos de Définir la validation basée sur les CQRS.


0 commentaires

3
votes
  1. Utilisez des "actions de compensation" si vous avez besoin de corriger des commandes incorrectes qui brisent votre magasin de lecture / écriture.
  2. Il est correct d'utiliser le stockage en lecture pour valider quelque chose avant la commande d'envoi, afin d'envoyer une commande valide, sans aucun doute.

0 commentaires

1
votes

En théorie, vous ne devriez pas avoir besoin de vérifier une clé en double, votre client doit être câblé pour récupérer de telles informations, entièrement segmentée de l'entrée de l'utilisateur. Par exemple: avoir une liste de tels éléments dans une liste déroulante ou toute autre liste sélective.

actions compensatoires ou commandes compensatoires ne doit être utilisée que lorsque le système n'a pas réussi à effectuer un processus , et doit donc annuler quelques commandes ou tout ce qu'il a fait dans la construction du point d'échec.

Par exemple, disons que le système doit insérer un réglage, le seul événement que cette commande devrait pouvoir augmenter devrait être quelque chose comme «StructinserDevent». Supposons donc que cet événement n'a pas été soulevé, nous pouvons ensuite instruire le système de compenser cela et annuler tout ce qu'il a fait dans ce processus.

Votre commande pourrait également implémenter une interface qui vous permet de vérifier via un DataManager. Ou vous pouvez simplement construire un Datamodel sans clé et faire le tableau auto-incrémentation afin que vous n'ayez même pas à vous soucier du scénario. ( Je suis sûr que vous savez maintenant qu'un Datamodel est juste une représentation de code d'une table existante dans votre serveur DB, lié par un orj, une autre partie fondamentale de toute application moderne. )


0 commentaires