Je conçois l'architecture de ma nouvelle application, j'ai choisi l'architecture de microservices, j'ai remarqué dans mon architecture que j'avais des modèles utilisés par différents microservices. Je veux savoir s'il existe un moyen de partager le code des modèles entre les microservices au lieu de les écrire dans chaque microservice.
Au fait, j'utilise le framework Spring Boot pour mon application.
Vous pouvez créer un projet distinct avec des modèles communs, créer un pot de ce projet et ajouter une dépendance de ce pot dans d'autres microservices.
Mais j'ai une expérience pratique, c'est un cauchemar pour maintenir ce projet commun, car pour chaque changement, vous devez créer une nouvelle version et mettre à jour les scripts de construction de tous les microservices.
À mon avis, nous ne devrions pas partager de modèles entre les microservices.
Si vous êtes draconien à propos de cette décision, vous vous retrouverez dans des conditions insatisfaisantes d'une manière ou d'une autre. Cela dépend de votre SDLC et de la dynamique de votre équipe. Chez Ipswitch, nous avons de nombreux services qui collaborent tous et il existe des concepts très partagés comme le périphérique et le moniteur. Le fait que chaque service ait son propre modèle ne serait pas viable. Nous l'avons fait dans un cas et la traduction a simplement créé du travail supplémentaire et introduit des défauts d'incohérence. Mais tout ce système est construit ensemble et par une grande équipe de développeurs. Le partage est donc le plus logique. Mais pour une entreprise, où vous avez plusieurs équipes et plusieurs SDLC sur plusieurs microservices, il est plus logique d'isoler les modèles pour éviter le couplage. Cependant, même dans ce cas, un ensemble de services en étroite collaboration gérés par une équipe donnée peut certainement partager un modèle si l'équipe accepte le risque/l'avantage de le faire. Il n'y a rien de mal à cela au-delà des universitaires et de la philosophie.
Bref, partagez le moins possible mais évitez également le travail inutile pour votre équipe.
Vous pouvez déplacer vos classes de modèle vers un autre projet/référentiel et l'ajouter en tant que dépendance à vos microservices qui doivent le partager.
Vous ne savez pas si vos microservices utilisent Swagger, mais vous pouvez utiliser Swagger Codegen pour générer vos modèles.
Par exemple, si vous avez UserService qui accepte et/ou renvoie un objet User. Le consommateur de UserService peut utiliser le plugin Swagger Codegen pour générer automatiquement la classe User au moment de la construction.
Vous pouvez utiliser le plugin Swagger Codengen maven ou gradle assez facilement.