Archyno
UMLModellierungspraxis

E-Commerce-Architektur, modelliert

Ein Onlineshop, dreimal gezeichnet: die Domäne, mit der er handelt, die Dienste, aus denen er besteht, und die Maschinen, auf denen er läuft. Drei Diagramme, drei verschiedene Fragen, und auf keinem etwas, das auf ein anderes gehört.

9 Min. LesezeitUML 2.5.132 von 35

Die kurze Antwort

  • Drei Diagramme decken fast jedes Gespräch ab: ein Klassendiagramm für die Domäne, ein Komponentendiagramm für Verträge, ein Verteilungsdiagramm für Maschinen.
  • Zeichnen Sie den Vertrag, nicht den Anbieter. Eine IPayment-Schnittstelle mit Stripe-Adapter sagt, dass der Shop von der Fähigkeit abhängt und nicht von der Marke.
  • Ob der Warenkorb ein eigener Dienst ist, ist eine Entscheidung, keine Tatsache. Einer, der geräteübergreifend überlebt, ist Zustand mit Eigentümer und bekommt einen Vertrag.
  • Die Datenbank ist ein Knoten im Verteilungsdiagramm und ein Adapter im Komponentendiagramm. Nie derselbe Kasten in beiden.
UML-Komponentendiagramm eines E-Commerce-Systems. Storefront und Admin console hängen beide von einer IOrders-Schnittstelle ab, die der Order service realisiert. Der Order service hängt von einer IPayment-Schnittstelle ab, die ein Payment-Gateway-Adapter realisiert, und von einer IStock-Schnittstelle, die der Inventory service realisiert.
Die Sicht, die die meisten mit "der Architektur" meinen: vier Dienste, drei Verträge und ein Adapter zwischen dem Shop und einem Zahlungsanbieter, von dem er nicht namentlich abhängt.

01Drei Diagramme, drei Fragen#

Ein Shop ist das Beispiel, nach dem alle greifen, und der Grund, warum die meisten Shop-Diagramme nutzlos sind, ist, dass sie ein einziges Bild sein wollen. Das Vokabular, die Dienstgrenzen und die Maschinen sind drei verschiedene Themen, und eine Zeichnung, die sie mischt, beantwortet keines davon - es ist das Diagramm mit einer Order-Klasse, einem Kubernetes-Logo und einer Queue auf derselben Fläche.

Nach Frage getrennt wird jede prüfbar:

  1. Was sind die Substantive? Ein Klassendiagramm der Domäne. Was eine Bestellung ist, woraus sie besteht, ohne was sie nicht existieren darf.
  2. Wer darf wen aufrufen? Ein Komponentendiagramm der Dienste und der Verträge zwischen ihnen.
  3. Wo läuft es? Ein Verteilungsdiagramm der Knoten und der Artefakte darauf.

Nichts davon ist ein Queue-Diagramm, ein Sequenzdiagramm oder ein Infrastructure-as-Code-Listing, und das mit Absicht. Die gibt es und sie sind nützlich; sie sind auch der Ort, an dem ein Dokumentationssatz stirbt, wenn die ersten drei nicht stimmen.

021. Die Domäne#

UML-Klassendiagramm einer E-Commerce-Domäne. Customer gibt null oder mehr Order auf. Eine Order ist aus einer oder mehreren OrderLine komponiert und mit einem Payment assoziiert. Jede OrderLine verweist auf ein Product. Payment ist mit einem Shipment assoziiert.
Fünf Klassen und vier Beziehungen. Die gefüllte Raute ist die ganze Behauptung: eine OrderLine kann ohne ihre Order nicht existieren und stirbt mit ihr, während ein Product die Bestellung, die es referenzierte, offensichtlich überlebt.

Das ist das Diagramm, das das Vokabular festlegt, und beim Vokabular gehen Shops zuerst schief. Ist ein "Warenkorb" eine noch nicht aufgegebene Order oder etwas anderes? Hält eine OrderLine den Preis zum Kaufzeitpunkt, oder liest sie ihn vom Product? Die zweite Frage beantwortet die Abbildung - unitPrice wohnt auf der Position - und dieses eine Attribut ist der Unterschied zwischen einem Shop, dessen alte Rechnungen nach einer Preisänderung richtig bleiben, und einem, dessen es nicht tun.

032. Die Dienste#

Die Abbildung oben in diesem Artikel. Zwei Clients, ein Bestelldienst und zwei Verträge, von denen er abhängt - Bestand und Zahlung. Lesen Sie es, indem Sie einen Kasten zuhalten: halten Sie den Bestelldienst zu, und übrig bleiben IOrders, IStock und IPayment - genau die Spezifikation, die ein Ersatz erfüllen müsste.

Der Adapter ist das nachahmenswerte Stück. IPaymentist ein Vertrag, der dem Shop gehört; der Stripe-Adapter realisiert ihn. Nichts im Bestelldienst nennt einen Anbieter, also hat "was würde ein Wechsel zu Adyen kosten?" eine sichtbare Antwort - ein Kasten und was auch immer der Adapter durchgelassen hat. Andersherum gezeichnet, mit dem Bestelldienst direkt von einer Stripe-Komponente abhängig, braucht dieselbe Frage eine Codesuche.

Was bewusst fehlt: der Warenkorb, der Suchindex, die Empfehlungsmaschine, der E-Mail-Versand. Jedes davon ist real, und keines ändert die Antwort auf "wer darf wen im Checkout-Pfad aufrufen". Sie kommen auf ihr eigenes Diagramm, wenn jemand eine Frage zu ihnen hat.

043. Die Verteilung#

UML-Verteilungsdiagramm eines E-Commerce-Systems. Ein Browser-Gerät kommuniziert über HTTPS mit einem CDN und einer Edge-Ausführungsumgebung, die mit einem Kubernetes-Cluster kommuniziert, der die Artefakte von Storefront und Bestelldienst enthält. Der Cluster erreicht ein PostgreSQL-Gerät über TCP 5432 und die Stripe-API über HTTPS.
Wo es läuft, und das einzige der drei Diagramme, das sich bei einem Plattformwechsel ändert. Artefakte sitzen in dem Knoten, der sie ausführt; die beschrifteten Pfade tragen Protokoll und Port.

Das ist das Diagramm, das niemand zeichnet, bis der erste Vorfall kommt, und das, welches Fragen beantwortet, die die anderen zwei nicht können: was ist aus dem Internet erreichbar, was spricht mit der Datenbank, und wo sitzt die Grenze zu einem Dritten. Die Stripe-API ist genau deshalb als externer Knoten gezeichnet, weil sie nicht Ihnen gehört - der Kasten erinnert daran, dass ihre Verfügbarkeit eine Abhängigkeit ist, die Sie nicht kontrollieren.

Es ist auch das einzige der drei, das an einem normalen Dienstag veraltet. Das Domänenmodell übersteht eine Re-Plattformierung unberührt und die Komponentensicht ebenso; das Verteilungsdiagramm wird von einer Cluster-Migration entwertet. Diese Asymmetrie ist ein guter Grund, es getrennt zu halten, statt "läuft auf Kubernetes" in die Komponentenkästen zu falten.

In je einer Zeile

  1. 01Drei Diagramme, drei Fragen: die Substantive, die Verträge, die Maschinen.
  2. 02Komposition gegen Assoziation bei Order, OrderLine und Product ist die ganze Fracht des Domänenmodells.
  3. 03Besitzen Sie den Zahlungsvertrag und lassen Sie einen Adapter den Anbieter nennen - das macht einen Wechsel bezifferbar.
  4. 04Halten Sie eine beliebige Komponente zu: das Verbleibende muss ihren Ersatz spezifizieren.
  5. 05Lassen Sie Suche, E-Mail und Empfehlungen vom Checkout-Diagramm weg; sie beantworten eine andere Frage.
  6. 06Nur die Verteilungssicht veraltet bei einer Re-Plattformierung, und deshalb ist sie ein eigenes Bild.

Die Notation hinter dem mittleren Diagramm steht mit fünf weiteren Topologien in den Beispielen für Komponentendiagramme. Um von einer Beschreibung statt von Hand einen ersten Entwurf eines der drei zu bekommen, siehe UML mit KI generieren.

05Häufige Fragen#

Welche Diagramme braucht die Dokumentation eines Onlineshops?

Drei decken fast jedes Gespräch ab: ein Klassendiagramm für das Domänenvokabular, ein Komponentendiagramm dafür, welcher Dienst welchen Vertrag aufrufen darf, und ein Verteilungsdiagramm dafür, wo alles läuft. Ein Sequenzdiagramm nur für die ein, zwei wirklich strittigen Abläufe - meist Checkout und Erstattung.

Wie modelliert man Zahlungsanbieter, ohne das Diagramm an einen zu binden?

Zeichnen Sie den Vertrag, nicht den Anbieter. Eine IPayment-Schnittstelle mit einem Stripe-Adapter, der sie realisiert, sagt, dass der Shop von der Fähigkeit abhängt und nicht von der Marke - das ist zutreffender und genau das, was man prüfen können will, wenn ein Anbieterwechsel vorgeschlagen wird.

Sollte der Warenkorb ein eigener Dienst sein?

Im Diagramm ist das eine Entscheidung, keine Tatsache - zeichnen Sie es so, wie Ihr System tatsächlich arbeitet. Ein Warenkorb im Frontend ist Client-Sache und braucht keinen Kasten; einer, der geräteübergreifend überlebt, ist Zustand mit einem Eigentümer und bekommt eine Komponente samt Vertrag wie alles andere.

Wohin gehört die Datenbank im Architekturdiagramm?

Ins Verteilungsdiagramm als Knoten, und ins Komponentendiagramm nur als der Adapter davor. Diese Trennung hält die Komponentensicht bei den Verträgen, von denen Ihr Code abhängt, und lässt die Frage, welche Postgres-Version wo läuft, dem einen Diagramm, das von Maschinen handelt.

In dieser Reihe

Passend dazu

Alle Artikel