Supposons que nous avons une application Spring Boot qui utilise une architecture de microservices. Chacun des services a ses propres modèles de domaine, mais chaque service doit référencer un objet de domaine utilisateur. Quelle serait la meilleure approche pour résoudre ce problème? Serait-il préférable que chaque service ait simplement un ID utilisateur et, le cas échéant, demande au service utilisateur les détails de l'utilisateur, ou serait-il préférable d'avoir une bibliothèque de domaine partagée pour tous les microservices?
spring
microservices
user1176999
la source
la source
Réponses:
Si vous avez opté pour des microservices pour bénéficier de l'évolutivité, du couplage lâche et de la modification indépendante facile de chaque service, vous devez vous y tenir le plus possible.
Architecture globale
Je pense que la meilleure approche serait:
Lecture supplémentaire:
Partage de Code
Maintenant, si vous êtes d'accord sur la solution ci-dessus, nous avons un microservice utilisateur (encapsulant le modèle de domaine pour l'utilisateur) et tous les autres services sont consommateurs du même microservice. La question est alors de savoir si vous voulez:
Je ne prendrai pas de position claire à ce sujet, car il existe des guerres d'opinion sur ce sujet de partage de code, et je ne pense pas que je suis en mesure de prendre une position objective. Voici déjà quelques lectures supplémentaires:
Mon opinion personnelle à ce sujet est que vous NE DEVEZ PAS PARTAGER de code entre l'utilisateur-fournisseur et l'utilisateur-consommateur, afin d'éviter un couplage serré. Cependant, vous POUVEZ PARTAGER le code de consommation des utilisateurs entre les consommateurs si vous disposez d'une solide gestion des versions. Cette approche aurait certains avantages:
la source
J'éviterais une bibliothèque partagée si possible. Demandez-vous de quelles propriétés d'un utilisateur chaque service a besoin? Souvent, il existe un domaine principal où la plupart des comportements entourant un utilisateur vivront, les domaines de prise en charge n'ayant souvent besoin que d'un ID utilisateur.
Si votre service a besoin d'autres détails concernant un utilisateur, consultez ici quelques suggestions sur la façon de gérer de telles situations
la source