En ce qui concerne les microservices, les cycles de vie de développement des services doivent également être indépendants. *
Différents SLDC et différentes équipes de développement
dans un véritable système MS, il pourrait y avoir plusieurs équipes impliquées dans le développement de l'écosystème, chacune en charge d'un ou plusieurs services. À leur tour, ces équipes peuvent être situées dans différents bureaux, villes, pays, plan ... Peut-être, elles ne se connaissent même pas, ce qui rend le partage des connaissances ou du code très difficile (si possible). Mais cela pourrait être très pratique car le code partagé implique également une sorte de raisonnement de partage et quelque chose d'important à rappeler est que, tout ce qui a du sens pour une équipe spécifique, n'a pas à le faire pour une autre équipe. Par exemple, étant donné le client DTO , cela peut être différent selon le service en jeu, car les clients sont interprétés (ou vus) différemment de chaque service.
Différents besoins, différentes technologies
Les SLDC isolés permettent également aux équipes de choisir la pile qui convient le mieux à leurs besoins. L'imposition de DTO implémentés dans une technologie spécifique limite la capacité de choix des équipes.
Les DTO ne sont ni des règles commerciales ni des contrats de services
Que sont vraiment les DTO? Objets simples sans autre objectif que de déplacer des données d'un côté à l'autre. Sacs de getters et setters. Ce n'est pas le genre de «connaissances» qui mérite d'être réutilisé, dans l'ensemble parce qu'il n'y a aucune connaissance du tout. Leur volatilité en fait également de mauvais candidats au couplage.
Contrairement à ce que Dherik a déclaré, il doit être possible pour un service de changer ses DTO sans avoir à effectuer d'autres services en même temps. Les services doivent être des lecteurs tolérants, des écrivains tolérants et tolérants aux défaillances . Sinon, ils provoquent le couplage de telle manière que l'architecture de service n'a aucun sens. Encore une fois, et contrairement à la réponse de Dherik, si trois services nécessitent exactement les mêmes DTO, il est probable que quelque chose s'est mal passé lors de la décomposition des services.
Différentes affaires, différentes interprétations
Bien qu'il puisse y avoir (et il y aura) des concepts transversaux entre les services, cela ne signifie pas que nous devons imposer un modèle canonique pour forcer tous les services à les interpréter de la même manière.
Étude de cas
Supposons que notre entreprise dispose de trois départements: service client , ventes et expédition . Supposons que chacune de ces versions libère un ou plusieurs services.
Le service client, en raison de sa langue de domaine , met en œuvre des services autour du concept de clients, où les clients sont des personnes . Par exemple, les clients sont modélisés comme nom , prénom , âge , sexe , e - mail , téléphone , etc.
Supposons maintenant que les services de vente et d' expédition modélisent également leurs services en fonction de la langue de leur domaine respectif. Dans ces langues, le concept client apparaît lui aussi mais avec une subtile différence. Pour eux, les clients ne sont pas (nécessairement) des personnes . Pour les ventes , les clients sont un numéro de document, une carte de crédit et une adresse de facturation , pour l' expédition un nom complet et une adresse de livraison aussi.
Si nous forçons Sales and Shipping à adopter le modèle canonique de données du service client , nous les forçons à traiter les données inutiles qui pourraient finir par introduire une complexité inutile si elles doivent maintenir la représentation entière et maintenir les données client en synchronisation avec le service client. .
Liens connexes
* Voici où réside la force de cette architecture
proto
fichier pour gRPC ou leavro
schéma pour Kafka et de générer les DTO dans les deux services, mais je ne partagerais pas une bibliothèque partagée entre deux projets.