Étant donné un agrégat d'ordre, il se compose de Order et OrderItems. L'ordre est la racine agrégée. Le passage d'une commande est le seul scénario nécessitant une transaction pour la cohérence des données. Ou au moins il y a beaucoup de scénarios implique de changer les données à la fois dans l'ordre et orderItems qui n'exigent pas de transaction.Pourquoi chaque changement de données dans les agrégats devrait-il être en transaction?
Avant DDD, la transaction est une décision prise lors de la création de méthodes. Vous pensez généralement si cette méthode ou ce comportement doit être en transaction afin de maintenir la cohérence. DDD suggère de faire une transaction pour chaque comportement possible exposé par la racine agrégée. Cela peut effectivement conduire à plus d'interblocages.
Je pense que je n'ai pas besoin d'implémenter tous les changements de données dans la racine agrégée pour être en transaction.
Par exemple, si vous modifiez uniquement les détails d'expédition, pourquoi auriez-vous besoin d'une transaction? Si vous supprimez seulement un article de commande, pourquoi auriez-vous besoin d'une transaction? Donc pour les méthodes Order.UpdateOrder et Order.DeleteOrderItem, nous ne devrions pas considérer les transactions.
Quelque chose me manque?
Pour les blocages possibles, vérifiez ce post. https://stackoverflow.com/questions/34662578/in-domain-driven-design-why-would-you-use-an-aggregate-object-and-what-key-pr – Costa
Je dis que tous les comportements dans l'agrégat racine doivent être en transaction. Je pense que nous devrions considérer la transaction quand un problème de cohérence est possible, et cela devrait être basé sur l'analyse du comportement. Par exemple, si vous modifiez uniquement les détails d'expédition, pourquoi vous auriez besoin d'une transaction. Si vous supprimez uniquement un article de commande, pourquoi aurait-il besoin d'une transaction? Donc, dans les méthodes Order.UpdateOrder, et Order.DeleteOrderItem, nous ne devrions pas considérer les transactions. – Costa
@Costa Mais vous avez besoin de transactions dans ces cas, sinon cela pourrait être compliqué en fonction de l'implémentation de votre dépôt. Gardez à l'esprit que l'agrégat est entièrement chargé quand/avant de traiter une commande, il ne devrait pas y avoir de chargement paresseux. –