2011-06-08 6 views
7

Je suis nouveau à DDD et je suis en train de lire des articles maintenant pour obtenir plus d'informations. L'un des articles se concentre sur les événements de domaine (DE). Par exemple, l'envoi de courrier électronique est un événement de domaine déclenché après l'atteinte de certains critères lors de l'exécution d'un code.Conception axée sur le domaine et les événements de domaine

code exemple montre une façon de traiter les événements de domaine et est suivi par le présent paragraphe

S'il vous plaît noter que le code ci-dessus sera exécuté sur le même fil dans la même transaction que le travail régulier de domaine afin que vous devrait éviter d'effectuer des activités de blocage, comme l'utilisation de services SMTP ou Web. Au lieu de cela, préférez utiliser la messagerie à sens unique pour communiquer avec autre chose qui effectue ces activités de blocage.

Mes questions sont

  1. Est-ce un problème général dans la gestion DE? Ou c'est juste le souci de la solution dans l'article mentionné?
  2. Si des événements de domaine sont déclenchés dans une transaction et que le système ne les gère pas de manière synchrone, comment doivent-ils être traités?
  3. Lorsque je décide de sérialiser ces événements et de laisser le planificateur (ou tout autre mécanisme) les exécuter, que se passe-t-il lorsque la transaction est annulée? (dans l'événement d'article est levé dans le code exécuté dans la transaction) qui les annulera (quand ils ne sont pas persistés à la base de données)?

Merci

Répondre

8

C'est une période de problème général never mind DDD

En général, dans tout système qui est nécessaire pour répondre de manière performante (par exemple un serveur Web, les longues activités d'exploitation devrait être manipulé de manière asynchrone au processus de déclenchement.

Cela signifie que la file d'attente.

Annulation de transaction doit retirer l'élément de la file d'attente.

Bien sûr, vous avez maintenant besoin de mécanismes supplémentaires pour gérer la situation où l'élément de la file ne parvient pas à traiter - le courrier électronique n'est pas envoyé - vous devez également le faire dans votre code de déclenchement. S'APPUYER sur le processus antérieur ayant déjà eu lieu va causer des problèmes à un moment donné. En bref, votre mécanisme de mise en file d'attente doit lui-même être transactionnel et permettre des tentatives et vous devez penser à l'ensemble de la chaîne d'événements en tant que workflow.

Questions connexes