Question

Après avoir vu cette vidéo par Greg Yound sur DDD

http://www.infoq.com/interviews/greg-young-ddd

Je me demandais comment vous pourriez mettre en œuvre la séparation-requête de commande (CQS) avec DDD lorsque vous avez des changements de mémoire?

Avec CQS vous avez deux répertoires, un pour les commandes, un pour les requêtes. Ainsi que deux groupes d'objets, les objets de commande et les objets de la requête. Les objets de commande ont seulement des méthodes, et pas de propriétés qui pourraient exposer la forme des objets, et ne doivent pas être utilisées pour afficher les données affichées à l'écran. objets de requête d'autre part sont utilisés pour afficher les données à l'écran.

Dans la vidéo les commandes vont toujours à la base de données, et vous pouvez donc utiliser le dépôt de requête pour récupérer les données mises à jour et réafficher à l'écran.

Pouvez-vous utiliser CQS avec quelque chose comme et écran d'édition dans ASP.NET, où des modifications sont apportées à la mémoire et l'écran doit être mis à jour plusieurs fois avec les changements avant que les changements sont conservés à la base de données?

Par exemple

  1. Je vais chercher un objet de requête à partir du référentiel de la requête et l'afficher sur l'écran
  2. je clique modifier
  3. Je REFETCH un objet de requête à partir du référentiel d'objets de requête et l'afficher sur le formulaire en mode édition
  4. modifier une valeur sur la forme, ce qui autoposts arrière et va chercher l'objet de commande et émet la commande correspondante
  5. QUE FAIRE: Je dois maintenant afficher l'objet mis à jour que la commande a apporté des modifications aux champs calculés. Comme l'objet de commande n'a pas été enregistré dans la base de données, je ne peux pas utiliser le dépôt de la requête. Et avec CQS Je ne voulais exposer la forme de l'objet de commande pour afficher sur l'écran. Comment voulez-vous obtenir un objet de requête de retour avec les modifications mises à jour pour afficher à l'écran.

Quelques solutions possibles que je peux penser est d'avoir un référentiel de session, ou un moyen d'obtenir un objet de requête de l'objet de commande. Ou ne CQS applique pas à ce type de scénario?

Il me semble que dans les changements vidéo se persistais tout de suite à la base de données, et je ne l'ai pas trouvé un exemple de DDD avec CQS qui aborde la question des changements de dosage à un objet de domaine et mettre à jour la vue de la modification objet de domaine avant d'émettre finalement une commande pour enregistrer l'objet de domaine.

Était-ce utile?

La solution

Si vous voulez vraiment utiliser CQS pour cela, je dirais que les deux prises en pension de requête et l'écriture repo ont tous deux une référence au même magasin de support. En général, cette référence est via une base de données externe -. Mais dans votre cas, il pourrait être une liste ou similaire

Autres conseils

Alors qu'est-ce qu'il semble que vous voulez ici est une commande plus granulaire.

EG: l'utilisateur interagit avec la page Web (disons faire un chèque avec un panier)

.

Les pages multiples obtenir des informations sont en train de construire une commande. La commande ne soit pas envoyé tant que l'utilisateur en fait vérifie où toutes les informations sont envoyées en une seule commande au domaine Appelons une commande « checkout ».

modèles de présentation sont très utiles à abstraire ce type d'interaction.

Hope this helps.

Greg

En outre pour le reste de vos préoccupations ...

Ce sont davantage des préoccupations avec cohérence à terme par opposition à CQRS. Vous n'avez pas besoin d'être finalement compatible avec CQRS vous pouvez faire le traitement de la commande d'écriture également au magasin de rapports (ou utiliser le même magasin physique pour les deux comme mentionné) de façon cohérente. Je recommande vraiment les gens à faire leur architecture de base et de venir plus tard throught et présenter une cohérence éventuelle en cas de besoin car il y a des coûts azssociated avec.

Dans la mémoire, vous utiliserez généralement .

En fait, vous voulez toujours utiliser ce modèle, mais la plupart des bases de données n'offre pas un moyen efficace d'appeler une méthode dans votre application lorsque quelque chose dans les modifications DB.

du modèle de conception de travail Modèles d'architecture d'applications d'entreprise correspond CQS très bien - il est essentiellement un grand commandement qui persistent des choses dans la base de données <. / p>

JdonFramework est CQRS DDD cadre java, il fournir un événement de domaine + modèle asynchrone, plus de détails https: // jdon.dev.java.net/

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