2016-08-11 2 views
0

Dans « Mise en œuvre Domain-Driven Design », Vernon donner des exemples détaillés pour l'intégration contexte délimité par une messagerie ou de repos solution, il mentionne également l'intégration de bases de données, mais je comprends ce n'est pas une solution très propre à base de données de partage ou au moins des tables db entre BC.Intégration des contextes bornés localement

Mais si les 2 BCs que je veux intégrer sont hébergés localement sur le même serveur, est-ce vraiment une bonne idée d'utiliser une messagerie/repos/solution rpc? (Qui semble plus approprié pour une distance accueilli BC pour moi)

Sinon, à l'exception de l'intégration DB, quels sont les autres alternatives? Héberger les deux BC dans le même processus et l'appeler directement (toujours en utilisant des adaptateurs et des traducteurs pour une séparation propre)?

Merci

+1

Comme mentionné précédemment, vous pouvez utiliser ZeroMQ ou (pour .NET) MediatR pour implémenter pub-sub en mémoire. Mais partager des données signifie étendre la propriété et cela signifie aussi que vos contextes ne sont plus limités. –

Répondre

2

Vous pourriez regarder en utilisant quelque chose comme 0MQ pour la communication inter-processus sur le même serveur. Dans le passé, j'ai aussi simplement organisé des choses dans le même processus que vous le suggérez et j'ai juste utilisé des interfaces/des messages en mémoire pour séparer les contextes.

Tout est sur le compromis à la fin, donc vous avez juste besoin de décider quel niveau d'isolement que vous êtes prêt à accepter. La solution la plus simple serait de séparer à l'intérieur d'une solution via des dossiers et des interfaces, l'autre extrémité du spectre étant des serveurs complètement séparés.

1

Je ne pense pas que cet emplacement devrait entrer en jeu par rapport à. l'intégration entre les BC.

Il y a vraiment d'autres facteurs à considérer comme la livraison garantie au bénéficiaire afin d'assurer que le traitement a lieu. Ceci devrait être requis que les deux BC soient ou non hébergés sur le même serveur.

Une autre raison d'ignorer l'emplacement est que lorsque vous avez besoin à l'échelle, votre architecture devrait être en mesure de le gérer à partir du get-go. Comme Tomliversidge l'a mentionné, il est possible d'utiliser certains mécanismes de déploiement tels que la messagerie non durable pour accélérer les choses, mais il y aura certainement un compromis et cela doit être une décision consciente.

+0

ok, merci pour votre réponse. Mais est-il vraiment important d'utiliser un "type d'intégration à distance" depuis le début même si nous ne prévoyons pas de déployer sur plusieurs serveurs pour le moment? Si nous le faisons correctement ne pouvons-nous pas intégrer dans le même processus maintenant qui serait plus rapide et plus simple et juste changer les adaptateurs plus tard si nous devons séparer les processus ou les serveurs? – Jonathan

+0

Vous pouvez le faire @Jonothan. Gardez juste à l'esprit que vous allez probablement être cohérent, aussi longtemps que le mécanisme que vous utilisez permet à tous les changements d'être garantis, alors vous allez être OK. Cependant, cela pourrait-il entraîner des transactions distribuées ou même une transaction couvrant deux BC? Si tel est le cas, vous risquez d'être confronté à un refactoring majeur plus tard. Si vous pouvez vous en sortir en mettant cela en pratique dès maintenant et que cela ne demande pas beaucoup de temps ou d'efforts, il vaut la peine d'en tenir compte. Pas "d'avenir" cependant, juste essayer d'empêcher le travail supplémentaire à l'avenir :) –