Exemples de diagrammes de composants
Cinq diagrammes de composants de systèmes sur lesquels vous avez sans doute travaillé. Chacun tranche une question : qui a le droit d'appeler qui, ce qu'un remplaçant devrait respecter, et où une dépendance part dans le mauvais sens.
9 min de lectureUML 2.5.118 sur 35
La réponse courte
- Le meilleur exemple est le plus petit qui tranche une question : deux ou trois composants, les interfaces entre eux, rien d'autre.
- Les microservices se projettent proprement : un service par composant, une API publiée par interface. Où ils tournent relève du diagramme de déploiement.
- De trois à neuf composants. Au-delà de dix, le lecteur cesse de suivre les flèches et survole, et le diagramme est devenu décoratif.
- Dessinez l'adaptateur, pas la base de données. Le contrat dont votre code dépend est le fait utile ; le produit lui-même relève de l'infrastructure.
01Comment lire les cinq#
Chaque diagramme ci-dessous emploie les trois mêmes marques, et si vous savez les lire vous savez lire les cinq : un composant est une boîte à icône de prise, une «interface» est une boîte nommant un contrat, et les flèches disent de quel côté de ce contrat se trouve chaque composant. Une flèche en tirets à triangle creux signifie j'implémente ceci. Une flèche en tirets simple signifie j'ai besoin de ceci. Le jeu complet est dans les symboles du diagramme de composants, et le raisonnement derrière la notation dans le guide du diagramme de composants.
Ils sont classés par fréquence d'apparition de la forme plutôt que par complexité. Chacun nomme la question qu'il tranche, car un diagramme de composants qui ne tranche rien est le genre le plus répandu et le moins utile : cinq boîtes, cinq flèches, et aucune affirmation avec laquelle on puisse être en désaccord.
032. Ports et adaptateurs#
Lisez les flèches et remarquez ce que le coeur de commande ne touche pas. Il ne dépend pas de HTTP et il ne dépend pas de PostgreSQL. Il réalise un contrat et en requiert un autre, et les deux sont des boîtes que n'importe qui aurait pu lui tendre.
C'est la forme que les gens désignent par architecture hexagonale, ports et adaptateurs ou clean architecture, et un diagramme de composants est le moyen le moins coûteux de vérifier si une base de code l'a réellement. Si la boîte du coeur a une flèche pointant vers un composant de base de données plutôt que vers une interface, le motif est un souhait : quelque chose au milieu importe le pilote.
043. Un contrat, deux implémentations#
C'est le diagramme à dessiner avant un remplacement, pas après. L'affirmation qu'il porte est précise et testable : tout ce dont le service de commandes a besoin de la facturation est dans IBilling, donc une seconde implémentation de cette interface peut être substituée sans que le service de commandes change.
C'est aussi le moyen le plus rapide de découvrir que l'affirmation est fausse. Si quelqu'un dit « le nouveau service ne sait pas produire les relevés PDF », alors les relevés PDF faisaient partie du contrat et manquent à l'interface, et le diagramme était faux avant la migration. Cette conversation coûte dix minutes au tableau et trois mois en production.
Une fois l'ancienne implémentation partie, supprimez-la du diagramme. Un diagramme de composants qui montre encore le mainframe deux ans après son extinction est la raison pour laquelle les gens cessent de faire confiance aux diagrammes.
054. Une architecture à greffons#
Topologiquement, c'est l'exemple trois avec une troisième implémentation, et cette ressemblance mérite qu'on s'y arrête : remplaçabilité et extensibilité sont le même dessin. Ce qui diffère, c'est l'intention. Dans une migration, la réalisation supplémentaire est temporaire ; dans une architecture à greffons, elle est le produit.
La technique de lecture qui paie ici est de masquer la colonne de droite avec la main. Ce qui reste - l'hôte et IExporter- est tout ce qu'un auteur de quatrième exportateur a besoin de savoir. Si la réponse à « puis-je écrire mon propre exportateur ? » exige de lire le source de l'hôte, l'interface est sous-spécifiée, et le diagramme vient de vous le dire.
065. Celui avec un cycle#
Deux services, chacun réalisant un contrat dont l'autre a besoin. Rien ici n'est de l'UML illégal et rien sur le diagramme n'est faux - le dessin est une image exacte d'un système qui va être difficile, et c'est précisément ce qu'on veut qu'un diagramme sache dire.
Un cycle entre composants signifie qu'aucun ne peut être compris seul : pas de déploiement indépendant, pas de test en isolation sans un bouchon de l'autre, et le remplacement de l'un doit satisfaire un contrat dont l'autre dépend simultanément. Sur un diagramme de classes, un cycle est une odeur ; entre unités déployables, c'est un risque de planning.
Les correctifs habituels sont visibles sur la même image. Déplacez ce dont Shipping a besoin depuis IOrders vers un événement publié par le service Orders, afin que la flèche devienne à sens unique. Ou extrayez la partie commune dans un troisième composant dont les deux dépendent, ce qui transforme le cycle en convergence et vous ramène à l'exemple un.
En une ligne chacun
- 01Convergence (exemple 1) : un contrat avec plusieurs consommateurs - nommez-le une fois, changez-le une fois.
- 02Chaîne (exemple 2) : le coeur dépend d'interfaces aux deux bouts, d'implémentations à aucun.
- 03Deux réalisations (exemple 3) : l'affirmation de migration, écrite là où elle peut être réfutée.
- 04Beaucoup de réalisations (exemple 4) : le même dessin qu'une migration, voulu de façon permanente.
- 05Un cycle (exemple 5) : une image honnête d'un système qu'on ne peut ni déployer ni remplacer par morceaux.
- 06Si un diagramme ne tranche aucun débat, c'est de la décoration - supprimez-le plutôt que de l'entretenir.
Pour en dessiner un contre votre propre système, la version pas à pas est dans comment dessiner un diagramme de composants. Pour l'endroit où ces composants tournent plutôt que pour ce qu'ils se promettent, c'est un diagramme de déploiement.
07Questions fréquentes#
À quoi ressemble un bon exemple de diagramme de composants ?
Le meilleur exemple est le plus petit qui tranche une question : deux ou trois composants, les interfaces entre eux, et rien d'autre. Un diagramme de catalogue partagé entre un site et une application dit davantage qu'un mur de quarante boîtes, parce qu'on le tient en tête d'un seul coup et qu'on peut le confronter au code.
Un diagramme de composants peut-il représenter des microservices ?
Oui, et c'est l'un de ses meilleurs usages. Chaque service devient un composant et chaque API publiée une interface, si bien que le diagramme énonce quel service a le droit d'appeler quel contrat. Ce qu'il ne doit pas montrer, c'est où ces services tournent : cela relève du diagramme de déploiement.
Combien de composants faut-il par diagramme ?
Entre trois et neuf environ. En dessous de trois il n'y a pas de structure à dessiner, au-delà de neuf ou dix le lecteur cesse de suivre les flèches et se met à survoler, et le diagramme devient décoratif. Un grand système se dessine en plusieurs diagrammes, un par question.
Faut-il dessiner une base de données comme un composant ?
Dessinez l'adaptateur, pas la base. Le diagramme porte sur le contrat dont votre code dépend : un composant Adaptateur PostgreSQL réalisant l'interface IOrderStore porte l'information utile. Le produit de base de données lui-même est de l'infrastructure et appartient au diagramme de déploiement.
Dans cette série
- 01Qu'est-ce que UML ?
- 02Symboles UML
- 03Choisir un diagramme
- 04Diagrammes de classes
- 05Exemples de diagrammes de classes
- 06Dessiner un diagramme de classes
- 07Symboles du diagramme de classes
- 08Diagrammes de séquence
- 09Exemples de diagrammes de séquence
- 10Dessiner un diagramme de séquence
- 11Diagrammes de cas d'utilisation
- 12Exemples de cas d'utilisation
- 13Diagrammes d'activité
- 14Exemples d'activité
- 15Diagrammes états-transitions
- 16Exemples d'états-transitions
- 17Diagrammes de composants
- 18Exemples de composants
- 19Dessiner un diagramme de composants
- 20Symboles de composants
- 21Diagrammes de déploiement
- 22Exemples de déploiement
- 23Diagrammes d'objets
- 24Diagrammes de paquetages
- 25Diagrammes de structure composite
- 26Diagrammes de communication
- 27Séquence vs communication
- 28Diagrammes de temps
- 29Diagrammes globaux d'interaction
- 30Diagrammes de profil
- 31UML avec l'IA
- 32Exemple e-commerce
- 33Exemple bancaire
- 34Exemple microservices
- 35Exemple AWS
À lire aussi
Diagrammes de structure
Référence de notation
Pratique de la modélisation
Diagrammes de structure
Diagrammes de structure
Pratique de la modélisation