Pourriez-vous me dire votre opinion sur la couche qui est la bonne pour placer les gestionnaires d'événements de domaine dans DDD? Par exemple, j'ai un service d'application pour ajouter un nouveau contrat et j'aimerais envoyer une notification par e-mail à la personne de contact, une fois le contrat ajouté, tout comme le service d'application ou le service de domaine de l'expéditeur de l'e-mail (qui gère l'événement ContractAdded) ou autre chose?
13
Le livre DDD original (Evans 2004) explique la couche application comme une couche mince qui exerce des objets de domaine en réponse à l'action de l'utilisateur. Les gestionnaires d'événements typiques pour les événements de domaine n'appartiennent donc pas à la couche application.
Il peut être judicieux de placer certains d'entre eux dans la couche domaine, tant que vous ne cassez pas la superposition en créant une dépendance vers le haut.
Si vous avez une couche d'infrastructure qui est en dessous de la couche de domaine, le gestionnaire d'événements ne peut pas être là car il casserait la superposition.
Si vous avez une couche d'adaptateurs au-dessus de la couche de domaine, vous pouvez y créer un gestionnaire d'événements. Découvrez l' architecture hexagonale .
la source
Je place les gestionnaires d'événements de domaine dans la couche Domaine en tant qu'interface de domaine
IDomainEventHandler
.Un exemple de gestionnaire d'événements de domaine est une stratégie qui s'abonne à certains événements de domaine afin d'initialiser une nouvelle transaction (par exemple: afin de déclencher une nouvelle commande de domaine), il est donc logique de l'avoir dans la couche Domaine car elle est liée à logique métier.
Nous pourrions penser à un exemple où une commande est confirmée et donc une demande de facture devrait être créée. Nous avons un événement
OrderConfirmedEvent
qui s'est produit. Une politique dans notre domaine serait chargée de s'abonner à cet événement et de créer une commande de domaineRequestInvoice
qui sera gérée par le gestionnaire de commandes et traitée par lui en conséquence.Si nous avions ce gestionnaire d'événements dans la couche application, cela signifierait que la couche application, en plus d'orchestrer les actions de l'utilisateur, exécuterait une logique métier, ce qui semble incorrect.
Mais nous avons
la source