Écrans CQRS et CRUD
L'un des principes de base de CQRS, si je comprends bien, est que les commandes doivent être centrées sur le comportement et avoir une valeur dans l'entreprise ou L'UL, et non centrées sur les données, c'est-à-dire., CRUD. Au lieu de se concentrer sur la mise à jour d'un client, nous avons des commandes comme CustomerHasMoved. Que faire si vous avez des écrans CRUD qui sont là pour corriger certaines données. Par exemple, nous devons changer le nom d'un client qui est mal orthographié. Cela n'a pas vraiment beaucoup de valeur dans l'entreprise. Devrait-ce juste être sous le parapluie D'une commande UpdateCustomer?
3 réponses
En fait, il peut y avoir plusieurs raisons de mettre à jour le nom d'un client. Comme vous le disiez, il pourrait être mal orthographié ou... vous pourriez vous marier et changer votre nom de votre mari.
Si vous n'aviez qu'une commande UpdateCustomer, vous perdriez l'intention d'origine et vous ne seriez pas en mesure d'avoir des comportements différents pour chacun d'eux. Si le nom a été misselled, il pourrait être aussi simple que la mise à jour de la base de données, alors que si votre client s'est marié, vous devrez peut-être en informer le département marketing afin qu'ils puissent offrir une réduction.
Dans le cas où votre entité est purement CRUD, c'est-à-dire qu'il n'y a aucune intention que vous pouvez associer à la modification des propriétés, alors il est correct d'avoir une UpdateEntityCommand. Vous pouvez ensuite passer lentement à quelque chose de plus basé sur les tâches
Je veux juste mettre un commentaire à ce sujet rapidement car il est apparu.
Il est important de noter que certains objets sont en fait CRUD et c'est ok. Je ne me soucie peut-être pas vraiment pourquoi un nom change dans mon domaine où j'expédie des produits aux gens et j'ai seulement besoin de ces données pour imprimer des étiquettes d'envoi. L'astuce consiste à rendre le comportement par défaut, puis à revenir à une interface CRUD une fois que vous êtes sûr que vous ne vous souciez vraiment pas des raisons par opposition à vice versa.
Greg
CustomerHasMoved est L'événement déclenché après la mise à jour de l'emplacement des clients. Cet événement met à jour les bases de données de lecture/bases de données de cache. La commande de l'interface graphique devrait être MoveCustomer ou quelque chose comme ça. Je pense que je mettrais la mise à jour du nom du client dans une commande comme UpdateCustomer.