CQRS: comment récupérer-vous des informations sur une commande exécutée?

StackOverflow https://stackoverflow.com/questions/8307267

  •  25-10-2019
  •  | 
  •  

Question

Dans la plupart des interfaces de commande que j'ai vu, il y a généralement une méthode « Exécuter » qui prend prend une entrée de commande et soit retourne void ou une structure générique indiquant si la commande exécutée avec succès ou non (nous utilisons ce dernier). Maintenant, je ne l'ai jamais pensé à ça avant, mais nous avons tout à coup le besoin de connaître quelques détails sur le résultat de la commande que ce que vous pouvez exposer génériquement.

Prenons l'exemple suivant:

vous avez une équipe et vous créez un écran où vous pouvez ajouter des membres à votre équipe. Les membres de l'équipe sont présentés dans une grille en dessous du -stuff « ajouter un nouveau membre ». Maintenant, lorsque vous appuyez sur « Ajouter un nouveau membre » que vous voulez exécuter certains jquery / roundohuse / whatever et ajouter le nouveau membre à la liste des membres de l'équipe. Pas de problème jusqu'à présent, mais vous voulez aussi inclure des données d'identification dans un champ caché pour chaque membre et cette id-données provient du serveur

.

Le problème est: comment puis-je obtenir que id-données du serveur? La commande « AddNewTeamMember » que je poussais à travers le -method ne me donne rien en retour utile « ExecuteCommand », et si j'ajoute une nouvelle méthode de requête au service disant quelque chose comme: « GetLastAddedTeamMember » alors je pourrais juste obtenir la dernière entrée ajoutée par quelqu'un d'autre (au moins si ce sont des données qui est très agressive ajoutés par les différents utilisateurs). Dans certaines situations, vous avez un identifiant unique naturel généré sur le côté client que nous pouvons utiliser, mais pour les membres de l'équipe nous n'avons pas.

Était-ce utile?

La solution

Étant donné que vous avez pas d'autre choix que de mettre à jour d'un widget sur la page quand une autre commande se termine, je vois deux choix pour vous:

  1. Rejeton la commande, l'affichage local quelque chose qui indique qu'il est soumis, et attendez que vous recevez une notification du serveur que la liste des membres de l'équipe a changé. Mettre à jour le widget pour refléter cela.

  2. Ajouter un ID de corrélation à votre commande lorsque vous soumettez, et ajoutez le membre de l'équipe locale à titre provisoire à la liste. Lorsque vous obtenez une confirmation du serveur qu'une mise à jour de membre de l'équipe est arrivé à cause de votre ID de corrélation, mettez à jour vos données locales.

Je suggère la première approche, où l'indicateur « provisoire » pourrait être lancer une version marquée de l'indication normale en place; puis, quand vous obtenez finalement une mise à jour, vous devriez avoir les données dont vous avez besoin.

Étant donné que vous êtes allé avec CQRS pour résoudre ce problème, je suppose que vous avez mises à jour fréquentes sur le contenu de ces widgets qui se passe en arrière-plan déjà, ont probablement résolu le problème « de mise à jour de fond ».

Dans le cas contraire, je vous suggère soit CQRS fossé comme un mauvais - trop compliquée - solution dans votre espace de problème ou résoudre le problème de la mise à jour d'arrière-plan premier

.

Autres conseils

Si vous voulez ajouter un membre de l'équipe existante, vous devez interroger le côté lecture de votre demande de ces données. Si vous avez besoin d'ajouter un nouveau membre de l'équipe, vous devez considérer s'il est nécessaire de montrer à l'utilisateur dans la grille ci-dessous à la fois. Pouvez-vous attendre jusqu'à ce que le membre de l'équipe est en place sur le côté lecture? Vous pouvez également interroger un service sur le côté serveur pour obtenir un identifiant unique (il peut retourner un GUID). vous ajoutez ensuite membre de l'équipe au réseau, et bien sûr, envoyer la commande au serveur. Mais, si elle est possible, essayez de concevoir l'application d'une manière que vous ne devez pas montrer le membre de l'équipe à la fois. Il est également possible de donner à l'utilisateur un message disant quelque chose comme ceci: «Membre de l'équipe a ajouté, en attente de réponse du serveur ». Ensuite, utilisez AJAX pour interroger le côté lecture pour les nouveaux membres de l'équipe. Quand il apparaît sur le côté de la lecture, l'afficher dans la grille. Vous pourriez avoir à traiter avec les membres de l'équipe ajoutés par d'autres utilisateurs, mais est-ce important? CQRS vous donne une excellente façon de collaborer avec d'autres utilisateurs, vous devez alors peut-être tirer profit de cela. Comme je le vois; forces CQRS vous de penser différentes, et peut-être pas une mauvaise chose.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top