Archyno
UMLDiagramy chování

UML sekvenční diagramy

Diagram chování, který lidé opravdu kreslí. Účastníci nahoře, čas plynoucí dolů a každá zpráva v pořadí, v jakém nastane - včetně větví, cyklů a volání, která selžou.

15 min čteníUML 2.5.18 z 35

Krátká odpověď

  • Sekvenční diagram odpovídá na to, co se děje, v jakém pořadí a mezi kým. Čas plyne dolů a svislá vzdálenost neříká nic o trvání.
  • Plná hlava šipky znamená, že volající čeká; otevřená, že pokračuje dál. Právě tento jediný rozdíl je to nejužitečnější, co notace o distribuovaném systému řekne.
  • Podmínky a opakování jsou kombinované fragmenty - alt, opt, loop, par, ref - každý jako rámeček s operátorem v levém horním rohu.
  • Když je šťastná cesta na papíře, selhání jdou spočítat: u každé zprávy se ptejte, co když odpověď nepřijde, co když přijde chyba a co když přijde dvakrát.
UML sekvenční diagram. Obchodník podá platbu do Checkout, který požádá platebního orchestrátora, aby ji autorizoval. Orchestrátor zaúčtuje kartu přes platební bránu a dostane schválení. Uvnitř fragmentu alt zapíše položku do účetní knihy, pokud jsou prostředky k dispozici, jinak vrátí zamítnutí. Checkout nakonec vrátí obchodníkovi potvrzení.
Autorizace platby. Čas běží dolů, každá svislá přerušovaná čára je účastník a orámovaný box je volba mezi dvěma alternativami.

01Co ukazuje#

Sekvenční diagram přesně odpovídá na jednu otázku: co se děje, v jakém pořadí a mezi kým. Je to diagram, který nakreslíte, když se dva lidé neshodnou, která služba volá kterou, nebo když tok prochází čtyřmi systémy a nikdo nemá celou cestu v hlavě.

Všechnu práci udělá rozvržení. Účastníci sedí podél horního okraje. Čas běží dolů - ne zleva doprava a ne v měřítku. Zpráva níž na stránce nastane po zprávě výš na stránce, a to je celé pravidlo čtení.

02Čáry života, aktivace, zprávy#

Tři kusy nábytku, a všechno ostatní je jejich obměna.

Čára života je hlavička nahoře plus přerušovaná svislá čára, která z ní běží dolů. Hlavička pojmenovává účastníka. Může to být název třídy, objekt (: Checkout), aktér nakreslený jako panáček nebo role se stereotypem jako «boundary» či «control». Cokoli si vyberete, buďte konzistentní po celém diagramu.

Aktivační pruh - někdy nazývaný výskyt vykonávání - je tenký obdélník položený na čáře života. Označuje období, během kterého ten účastník něco dělá. Vnořené pruhy znamenají, že účastník zavolal zpět sám sebe. Aktivace jsou v UML nepovinné a vyplatí se je kreslit: dělají zřejmým, že Checkout stále čeká, zatímco brána pracuje.

Zpráva je vodorovná šipka. Její styl říká, o jaký druh volání jde, a to je ta část, kterou se vyplatí zapamatovat.

03Druhy zpráv#

PrvekNotaceCo znamená
SynchronníPlná čára, vyplněná šipka. Volající je blokován, dokud nedostane odpověď. Běžná metoda nebo blokující HTTP volání.
AsynchronníPlná čára, otevřená šipka. Volající jde okamžitě dál. Publikování do fronty nebo vyvolání události.
OdpověďPřerušovaná čára, otevřená šipka. Návrat. Označte ji tím, co se vrací, ne slovem „return“.
CreatePřerušovaná šipka končící na hlavičce čáry života, která začíná někde níž. Označená «create».
Destroykřížek na konci čáry životaÚčastník přestává existovat; jeho čára života končí u křížku.

Rozdíl mezi vyplněnou a otevřenou šipkou je ten, který má skutečnou váhu. Je to rozdíl mezi „volající je teď blokován“ a „volající šel dál“, a je to ta nejužitečnější věc, kterou sekvenční diagram řekne čtenáři o distribuovaném systému.

UML sekvenční diagram ukazující volání na sebe a vytvoření objektu. Orchestrátor ověří sám sebe, pak přerušovanou zprávou create vytvoří Receipt, zavolá na něm render a nakonec ho zruší, což je označeno křížkem na konci jeho čáry života.
Volání na sebe vychází a vrací se na tutéž čáru života. Hlavička vytvořeného účastníka klesne ke zprávě, která ho vytváří, a zrušený končí u křížku.

04Větvení: kombinované fragmenty#

Skutečné toky mají podmínky i opakování. UML řeší oboje kombinovaným fragmentem: boxem nakresleným kolem série zpráv, s operátorem ve štítku v jeho levém horním rohu.

  • alt - alternativy. Rozdělený přerušovanou čarou na přihrádky, každá se stráží v hranatých závorkách. Proběhne právě jedna. Tohle je if/else.
  • opt - nepovinné. Jedna přihrádka se stráží; buď proběhne, nebo ne. Tohle je if bez else.
  • loop - opakování. Stráž udává podmínku nebo meze, jako v loop [1..*] nebo loop [dokud jsou další stránky].
  • par - paralelně. Přihrádky běží souběžně, bez zaručeného pořadí.
  • ref - odkaz na interakci definovanou na jiném diagramu. Takhle zabráníte tomu, aby jeden sekvenční diagram narostl na tři stránky.
  • critical - oblast, která se nesmí proplést s ničím jiným.

05Rámec, brány a zprávy odnikud#

Všechno výše sedí v boxu, který většina diagramů kreslí a málokdo si ho všimne: rámec interakce, obdélník kolem celého diagramu se štítkem v levém horním rohu, na kterém je sd a název interakce. Vypadá jako výzdoba a není - je to to, co interakci dává jméno, a právě jméno umožňuje ref. Bez něj nemůžete dlouhý tok rozřezat na kusy, což znamená, že každý tok se musí vejít na jednu stránku.

PrvekNotaceCo znamená
Rámecsd AuthorizePaymentBox kolem diagramu a název interakce v něm. To, na co ukazuje ref na jiném diagramu.
Bránašipka končící na rámciZpráva, která překračuje hranici rámce místo toho, aby začínala či končila na čáře života. Je to seznam parametrů interakce: takhle ref cokoli přijímá a vrací.
Nalezená zprávavyplněný kroužek na ocasuPřichází od odesílatele, kterého diagram nemodeluje - kliknutí uživatele, plánovač, webhook. Poctivé a mnohem lepší než vymýšlet čáru života pro vnější svět.
Ztracená zprávavyplněný kroužek na hlavěPoslaná příjemci, kterého diagram nemodeluje, nebo opravdu nikdy nedorazí. Vzácná na návrhovém diagramu, užitečná na tom, který popisuje selhání.
Omezení trvání{ < 200ms }Omezení ve složených závorkách překlenující dva body na čáře života. Jediný způsob, jak sekvenční diagram umí říct cokoli o čase, když svislá vzdálenost neříká nic.
Stavový invariant{ order = PLACED }Podmínka napsaná na čáře života, která v tom bodě musí platit. Užitečná přímo nad zprávou, jejíž celý důvod existence je právě ta podmínka.

Seznam fragmentů v předchozí sekci je pracovní sada, ne celá. Existují další čtyři operátory a tři z nich si občas své místo zaslouží: break opustí zbytek obklopujícího fragmentu, když platí jeho stráž, což je přirozený tvar časného návratu při chybě; strict vynutí pořadí svých přihrádek tam, kde je obyčejné seq nechává volné; neg označuje interakci, která nesmí nastat, což je způsob, jak do obrázku zapsat negativní test. assert, ignore a consider patří do formální specifikace a klidně je přeskočte, dokud vás k nim něco nedotlačí.

06Jak z něj vyčíst cesty selhání#

Nejcennější na sekvenčním diagramu není zdokumentování šťastné cesty. Je to to, že když je šťastná cesta jednou na papíře, selhání jde spočítat - a tok přes čtyři systémy jich má mnohem víc, než kdokoli z hlavy odhadne.

Projděte diagram dolů a u každé zprávy si položte tři otázky v pořadí. Odpovědi jsou vaše rozšířené cesty a každá z nich je buď fragment, který máte nakreslit, nebo rozhodnutí, které musí někdo udělat.

  1. Co když nepřijde odpověď? Každá synchronní zpráva je místo, kde volající může blokovat navždy. Někde existuje hodnota vypršení; pokud ji nikdo v místnosti nezná, tohle je to zjištění. Nakreslete to jako alt se stráží [timeout] a číslo skončí na diagramu, kde se o něm dá polemizovat.
  2. Co když je odpovědí selhání? Odlišné od žádné odpovědi a znepokojivě velkým množstvím produkčního kódu zpracované stejně. Zamítnutá autorizace a mrtvá akviziční banka potřebují jiné ošetření a právě na diagramu se ten rozdíl zviditelní.
  3. Co když se tohle doručí dvakrát? Ptejte se na to u každé asynchronní zprávy, protože fronty doručují znovu a klienti opakují. Pokud je odpovědí „zákazníkovi se strhne dvakrát“, našli jste požadavek na idempotenci, který v ticketu nebyl.

Pak si diagram přečtěte ještě jednou, pozpátku, kvůli otázce, kterou průchod dopředu nikdy nezachytí: co se už stalo a teď se to musí vrátit zpět? Selhání u čtvrté zprávy nechává účinky prvních tří na místě. To je kompenzační logika a sekvenční diagram je nejlevnějším místem na světě, kde zjistíte, že nějakou potřebujete.

07Kdy takový diagram kreslit#

Sáhněte po něm, když

  • Tok prochází několika službami a pořadí volání není zřejmé
  • Potřebujete rozhodnout spor o tom, kdo je zodpovědný za volání koho
  • Dokumentujete protokol, handshake nebo integraci pro jiný tým
  • Zjišťujete, kde jsou režimy selhání - diagram zviditelní chybějící chybové cesty

Sáhněte po něčem jiném, když

  • Interakce jsou dva účastníci a tři zprávy - napište prostě tu větu
  • Zajímá vás uplynulý čas nebo termíny - použijte časovací diagram
  • Otázkou je struktura, ne pořadí - použijte diagram tříd nebo komponent
  • Tok je většinou větvící logika - diagram aktivit bude mnohem čitelnější

Sekvenční diagram je také nejúčinnějším UML artefaktem pro revizi návrhu dřív, než se postaví, protože vytlačuje nepříjemné otázky na světlo. Co se stane, když bráně vyprší čas? Kdo to opakuje? Je to volání blokující? Diagram nejde nakreslit, aniž byste na ně odpověděli.

08Časté chyby#

  1. Každá šipka nakreslená plná a vyplněná. Pokud všechno vypadá synchronně, diagram zahodil své nejužitečnější rozlišení. Na „pošli a zapomeň“ použijte otevřené hlavy.
  2. Šipky odpovědi na všechno. Odpověď na synchronní volání je často implicitní a jde vynechat. Kreslete ji, když na vrácené hodnotě záleží.
  3. Míchání úrovní abstrakce. Čára života pro celou platební platformu vedle čáry života pro jednu pomocnou třídu. Vyberte si jednu výšku.
  4. Žádná chybová cesta. Samotná šťastná cesta je ta méně zajímavá polovina. Právě alt s větví vypršení dělá diagram hodným revize.
  5. Dvacet čar života. Zhruba nad sedm se diagram přestane vejít na obrazovku a začne se spíš rolovat než číst. Rozdělte ho a použijte ref.

Po jednom řádku na každé

  1. 01Účastníci podél horního okraje, čas dolů; svislá vzdálenost není trvání.
  2. 02Vyplněná šipka je synchronní a blokující, otevřená šipka je asynchronní.
  3. 03Přerušované šipky jsou odpovědi; přerušovaná do snížené hlavičky je «create».
  4. 04Aktivační pruhy ukazují, kdo je zaneprázdněn, a stojí za tu námahu.
  5. 05alt, opt, loop, par a ref pokryjí větvení; nikdy nevnořujte hlouběji než dvě úrovně.
  6. 06Nakreslete cestu selhání - je to ta polovina, která dělá diagram užitečným.

09Časté dotazy#

Co je čára života v sekvenčním diagramu?

Přerušovaná svislá čára pod každým účastníkem, která představuje jeho existenci v čase. Čas plyne dolů, takže zpráva nakreslená níž na stránce nastane později než ta nad ní.

Jaký je rozdíl mezi synchronní a asynchronní zprávou?

Synchronní zpráva má plnou vyplněnou šipku a znamená, že odesílatel čeká na návrat volání. Asynchronní zpráva má otevřenou čárovou šipku a znamená, že odesílatel pokračuje okamžitě. Odpověď na synchronní volání je přerušovaná čára s otevřenou šipkou.

Co znamenají alt, opt, loop a par?

Jsou to kombinované fragmenty: pojmenované rámy obepínající část interakce. alt je větvení se strážemi, opt je jediná větev, která nemusí proběhnout, loop opakuje svůj obsah a par znamená, že se jeho oblasti mohou prokládat. Název stojí v pětiúhelníku vlevo nahoře.

Co je pruh aktivace?

Úzký obdélník kreslený na čáře života, dokud účastník něco dělá, formálně specifikace vykonávání. Začíná, když účastník dostane zprávu, a končí, když se vrátí - a právě proto jsou vnořená volání vidět jako naskládané pruhy.

Kdy použít sekvenční diagram místo komunikačního?

Sekvenční, když jde o pořadí zpráv: protokol, chybová cesta, vypršení času. Komunikační, když jde o strukturu, tedy kdo je s kým spojen. Oba nesou stejnou informaci a liší se jen rozložením.

V této sérii

Související články

Všechny články