Architecture e-commerce, modélisée
Une boutique en ligne, dessinée trois fois : le domaine qu'elle manipule, les services dont elle est faite, et les machines sur lesquelles elle tourne. Trois diagrammes, trois questions distinctes, et sur aucun rien qui appartienne à un autre.
9 min de lectureUML 2.5.132 sur 35
La réponse courte
- Trois diagrammes couvrent presque toutes les discussions : un diagramme de classes pour le domaine, un de composants pour les contrats, un de déploiement pour les machines.
- Dessinez le contrat, pas le prestataire. Une interface IPayment réalisée par un adaptateur Stripe dit que la boutique dépend de la capacité et non de la marque.
- Que le panier soit un service à part est une décision, pas un fait. Un panier qui survit d'un appareil à l'autre est un état possédé et reçoit un contrat.
- La base de données est un nœud sur le diagramme de déploiement et un adaptateur sur celui de composants. Jamais la même boîte sur les deux.
01Trois diagrammes, trois questions#
Une boutique est l'exemple vers lequel tout le monde se tourne, et si la plupart des diagrammes de boutique sont inutiles, c'est qu'ils essaient d'être une seule image. Le vocabulaire, les frontières de services et les machines sont trois sujets différents, et un dessin qui les mélange n'en traite aucun : c'est le diagramme avec une classe Order, un logo Kubernetes et une file d'attente sur la même toile.
Découpé par question, chacun devient vérifiable :
- Quels sont les noms ? Un diagramme de classes du domaine. Ce qu'est une commande, de quoi elle est faite, sans quoi elle ne peut pas exister.
- Qui a le droit d'appeler qui ? Un diagramme de composants des services et des contrats entre eux.
- Où cela tourne-t-il ? Un diagramme de déploiement des noeuds et des artefacts qui s'y trouvent.
Rien ici n'est un diagramme de files, un diagramme de séquence ni un listing d'infrastructure-as-code, et c'est volontaire. Ceux-là existent et sont utiles ; ils sont aussi l'endroit où un ensemble documentaire meurt si les trois premiers ne sont pas justes.
021. Le domaine#
C'est le diagramme qui règle le vocabulaire, et le vocabulaire est le premier endroit où les boutiques dérapent. Un "panier" est-il une Order non encore passée, ou une autre chose ? Une OrderLine porte-t-elle le prix au moment de l'achat, ou le lit-elle sur le Product ? La seconde question est tranchée sur la figure - unitPrice vit sur la ligne - et cet unique attribut fait la différence entre une boutique dont les anciennes factures restent justes après un changement de prix et une dont elles ne le restent pas.
032. Les services#
La figure en tête de cet article. Deux clients, un service de commandes, et deux contrats dont il dépend : le stock et le paiement. Lisez-le en masquant une boîte : masquez le service de commandes et il reste IOrders, IStock et IPayment, c'est-à-dire exactement la spécification qu'un remplaçant devrait satisfaire.
L'adaptateur est la pièce à copier. IPaymentest un contrat que la boutique possède ; l'adaptateur Stripe le réalise. Rien dans le service de commandes ne nomme un prestataire, si bien que "que coûterait un passage à Adyen ?" a une réponse visible : une boîte, plus ce que l'adaptateur s'avère avoir laissé fuir. Dessiné dans l'autre sens, avec le service de commandes dépendant directement d'un composant Stripe, la même question demande une recherche dans le code.
Ce qui est délibérément absent : le panier, l'index de recherche, le moteur de recommandation, l'envoi d'e-mails. Chacun est réel, et aucun ne change la réponse à "qui a le droit d'appeler qui sur le chemin de la commande". Ils vont sur leur propre diagramme, quand quelqu'un aura une question à leur sujet.
043. Le déploiement#
C'est le diagramme que personne ne dessine avant le premier incident, et celui qui répond aux questions que les deux autres ne peuvent pas : qu'est-ce qui est joignable depuis internet, qu'est-ce qui parle à la base, et où se situe la frontière avec un tiers. L'API Stripe est dessinée comme un noeud externe précisément parce qu'elle n'est pas la vôtre : la boîte rappelle que sa disponibilité est une dépendance que vous ne contrôlez pas.
C'est aussi le seul des trois qui se périme un mardi ordinaire. Le modèle de domaine traverse un changement de plateforme intact, et la vue composants aussi ; le diagramme de déploiement est invalidé par une migration de cluster. Cette asymétrie est une bonne raison de le garder à part plutôt que de replier "tourne sur Kubernetes" dans les boîtes de composants.
En une ligne chacun
- 01Trois diagrammes, trois questions : les noms, les contrats, les machines.
- 02Composition contre association sur Order, OrderLine et Product : c'est toute la charge du modèle de domaine.
- 03Possédez le contrat de paiement et laissez un adaptateur nommer le prestataire : c'est ce qui rend un changement chiffrable.
- 04Masquez n'importe quel composant : ce qui reste doit spécifier son remplaçant.
- 05Laissez la recherche, l'e-mail et les recommandations hors du diagramme de commande ; ils répondent à une autre question.
- 06Seule la vue déploiement se périme lors d'un changement de plateforme, d'où son image à part.
La notation derrière le diagramme du milieu, avec cinq autres topologies, est dans les exemples de diagrammes de composants. Pour produire un premier jet de l'un des trois à partir d'une description plutôt qu'à la main, voyez générer de l'UML avec l'IA.
05Questions fréquentes#
Quels diagrammes pour documenter un site e-commerce ?
Trois couvrent presque toutes les discussions : un diagramme de classes pour le vocabulaire du domaine, un diagramme de composants pour savoir quel service peut appeler quel contrat, et un diagramme de déploiement pour savoir où tout cela tourne. Un diagramme de séquence seulement pour les un ou deux flux vraiment disputés, souvent le paiement et les remboursements.
Comment modéliser un prestataire de paiement sans y enfermer le diagramme ?
Dessinez le contrat, pas le prestataire. Une interface IPayment réalisée par un adaptateur Stripe dit que la boutique dépend de la capacité et non de la marque, ce qui est plus juste et correspond à ce qu'on veut pouvoir vérifier le jour où quelqu'un propose de changer de fournisseur.
Le panier doit-il être un service à part ?
Sur le diagramme c'est une décision, pas un fait : dessinez-le comme votre système fonctionne réellement. Un panier qui vit dans la vitrine relève du client et n'a pas besoin de boîte ; un panier qui survit d'un appareil à l'autre est un état que quelqu'un possède, et il obtient un composant et un contrat comme le reste.
Où placer la base de données sur un diagramme d'architecture ?
Sur le diagramme de déploiement comme nœud, et sur le diagramme de composants uniquement sous la forme de l'adaptateur qui la précède. Cette séparation garde la vue composants centrée sur les contrats dont dépend le code, et laisse la version de Postgres au seul diagramme qui parle de machines.
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
Diagrammes de structure
Diagrammes de structure
Diagrammes de structure
Pratique de la modélisation
Pratique de la modélisation