Question

Comment séparer racines Aggregate (AR) communiquent entre eux dans un environnement construit sur des principes DDD au moyen d'un back-end total provenant d'événement?

Par exemple, j'ai une racine globale de Facility (AR) qui a une méthode de fabrication responsable de la création d'un Booking AR. Le Booking est une combinaison sensible au temps d'un Person AR et AR Facility. Un Person ne peut être réservé à un seul Facility.

En DDD, j'aurais tenu des références à la Booking dans Person et Person dans Facility. Cependant, lors de la création d'événements pour une utilisation en cas de sourcing, je pense que d'essayer de gérer la désérialisation des événements de l'arrière-plan deviendrait prohibitif. Par conséquent, j'ai pris seulement des références aux titulaires de id unique basé objet de valeur. Cela soulève un nouveau problème, cependant, quand une méthode sur un AR doit appeler une autre méthode sur une autre AR - comment gérez-vous cette situation? Appuyez sur le référentiel source d'événement dans le domaine AR?

Quel est le cas d'utilisation générale dans ce scénario? Suis-je approche tout faux?

Était-ce utile?

La solution

limites Aggregate racines définissent une limite de cohérence. A l'intérieur l'ensemble, la cohérence est garantie. En dehors ... ce n'est pas. Donc, vous ne devriez pas avoir des opérations qui couvre plusieurs agrégats et doivent être cohérents. Si vous avez besoin d'une opération qui couvre deux agrégats, vous devriez revoir vos limites globales.

Pour les choses qui se passent en dehors de l'agrégat vous devriez avoir un gestionnaire d'événements qui envoie une commande à d'autres agrégats. Si la logique des actions entre des agrégats est plus complexe, vous pouvez définir un processus, une machine d'état qui écoutera les événements et envoyer des commandes aux agrégats. Les processus peuvent être utilisés pour définir les transactions en cours d'exécution à long (avec compensation au lieu de rollback), ou de prendre des décisions d'affaires basées sur ce qui se passe dans le système à grande échelle (même entre des contextes bornés).

Autres conseils

Lors de l'utilisation de l'événement et l'approvisionnement CQRS le plus élégant (au moins à mon avis) moyen de communication inter-AR est la messagerie. Vous pouvez regarder Ncqrs projet (il sera plus facile si vous êtes un gars .NET), en particulier ' branche messagerie. L'idée est, implémenter l'interface ARs IMessageHandler pour chaque type de message qu'ils gèrent et AR classe de base expose la méthode Envoyer pour envoyer des messages là-bas. Au moyen de ces clients API peut invoquer le comportement du modèle et le modèle lui-même peut communiquer (entre ARs).

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