2017-09-26 2 views
1

Je sais dans DDD que la suppression de la racine agrégée doit tout supprimer en une fois.Comment supprimer plusieurs agrégats dans DDD?

Mais dans l'exemple Agile que vaughn ici a vernon https://vaughnvernon.co/?p=838 les BackLogItem et agrégats sont produits existent dans des agrégats distincts et l'agrégat BackLogItem racine fait référence produit par la racine globale Id.So, Si je veux supprimer la racine globale du produit ne signifierait pas que je devrais supprimer ses BackLogItems?

Donc, ma question comment supprimer plusieurs agrégats dans DDD et si oui serait-ce possible en utilisant les services de domaine, événement de domaine ou autre?

P.S

Selon vernon vaughn que nous ne devrions pas modifier plus d'un total dans la même transaction (dans certains cas, nous sommes obligés d'utiliser cohérence éventuelle).

Répondre

1

Le mécanisme habituel de comportement distribué à travers de multiples agrégats est d'utiliser un gestionnaire de processus .

Je recommande à partir de Rinat's writeup, parce que cela va vraiment au cœur du problème; un gestionnaire de processus est juste un stand in pour un être humain qui réagit aux événements en envoyant des commandes à d'autres agrégats.

  • look Oh, le produit a été retiré
  • je devrais charger une liste des BackLogItems qui font référence à ce produit
  • et retirez chacun d'eux à son tour

Si votre la modélisation des articles du journal arrière comme appartenant à un agrégat distinct du produit est correcte, il s'ensuit que les modifications apportées aux articles du journal arrière peuvent être séparées dans le temps des modifications apportées au produit. En outre, voir Udi Dahan: Don't Delete -- Just Don't.

+1

Pourriez-vous me fournir une implémentation pour le gestionnaire de processus avec DDD en utilisant C# le cas échéant? et le gestionnaire de processus applique-t-il les mêmes concepts de CQRS/ES. –