Archyno
UMLPratique de la modélisation

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.
Diagramme de composants UML d'un système e-commerce. Storefront et Admin console dépendent tous deux d'une interface IOrders réalisée par l'Order service. L'Order service dépend d'une interface IPayment réalisée par un adaptateur de passerelle de paiement, et d'une interface IStock réalisée par l'Inventory service.
La vue que la plupart des gens entendent par "l'architecture" : quatre services, trois contrats, et un adaptateur entre la boutique et un prestataire de paiement dont elle ne dépend pas nommément.

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 :

  1. 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.
  2. Qui a le droit d'appeler qui ? Un diagramme de composants des services et des contrats entre eux.
  3. 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#

Diagramme de classes UML d'un domaine e-commerce. Customer passe zéro ou plusieurs Order. Une Order est composée d'une ou plusieurs OrderLine et associée à un Payment. Chaque OrderLine renvoie à un Product. Payment est associé à un Shipment.
Cinq classes et quatre relations. Le losange plein est toute l'affirmation : une OrderLine ne peut pas exister sans son Order et meurt avec lui, là où un Product survit manifestement à la commande qui l'a référencé.

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#

Diagramme de déploiement UML d'un système e-commerce. Un appareil navigateur communique en HTTPS avec un CDN et un environnement d'exécution en périphérie, qui communique avec un cluster Kubernetes contenant les artefacts de la vitrine et du service de commandes. Le cluster atteint un appareil PostgreSQL en TCP 5432 et l'API Stripe en HTTPS.
Où cela tourne, et le seul des trois diagrammes qui change quand vous changez de plateforme. Les artefacts sont à l'intérieur du noeud qui les exécute ; les chemins étiquetés portent le protocole et le port.

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

  1. 01Trois diagrammes, trois questions : les noms, les contrats, les machines.
  2. 02Composition contre association sur Order, OrderLine et Product : c'est toute la charge du modèle de domaine.
  3. 03Possédez le contrat de paiement et laissez un adaptateur nommer le prestataire : c'est ce qui rend un changement chiffrable.
  4. 04Masquez n'importe quel composant : ce qui reste doit spécifier son remplaçant.
  5. 05Laissez la recherche, l'e-mail et les recommandations hors du diagramme de commande ; ils répondent à une autre question.
  6. 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

À lire aussi

Tous les articles