Archyno
UMLDiagramy správania

Príklady stavových diagramov

Tri stavové automaty, ktoré môžete použiť hneď - životný cyklus objednávky, redakčný workflow s návratom späť a fragment ukazujúci, prečo čakajúci stav nie je zaseknutý stav.

8 min čítaniaUML 2.5.116 z 35

Krátka odpoveď

  • Životný cyklus objednávky je príklad, ktorý sa oplatí prevziať: šesť stavov, jeden spúšťač na prechod a dva rôzne konce namiesto jedného.
  • Viac koncových stavov je normálne. Zrušená aj doručená sú ukončené, a zviesť ich do toho istého krúžku ten rozdiel skryje.
  • Timeout je prechod, ktorého spúšťačom je časová udalosť - after(72 hodín). Stráž netreba, spúšťačom je samotný plynúci čas.
  • Stav bez povoleného prechodu je nečinný, nie pokazený. To je opak diagramu aktivít, kde token bez východu znamená zaseknutie.
UML diagram stavového automatu pre objednávku. Z počiatočného pseudostavu je objednávka v stave Košík; checkout ju presunie do Zadaná. Zo Zadanej ju pay pri dostatku prostriedkov presunie do Zaplatená a cancel ju presunie nadol do Zrušená, ktorá dosiahne koncový stav. Zo Zaplatenej ju dispatch presunie nadol do Odoslaná, deliver do Doručená a Doručená dosiahne druhý koncový stav.
Životný cyklus objednávky. Šesť stavov, jeden spúšťač na prechod a dva konce, ktoré nie sú tým istým koncom.

01Príklad 1: životný cyklus objednávky#

Ak má tabuľka vo vašej databáze stĺpec status, tento diagram už v kóde implicitne existuje - je len rozpísaný cez tucet strážnych podmienok namiesto toho, aby bol raz nakreslený. Spraviť ho výslovným je najlacnejšie cvičenie na hľadanie chýb, aké stavový automat ponúka.

Čítajte prechody, nie boxy. Každý je označený spúšťačom, ktorý ho spôsobuje - checkout, pay, dispatch, deliver - a jeden nesie za lomkou účinok: dispatch / print label. Tie popisky sú obsahom. Diagram šiestich zaoblených boxov s neoznačenými šípkami hovorí len to, že sa veci menia, čo už každý vedel.

Tie dva koncové stavy sú zámerné. Zrušená aj Doručená sú terminálne a nie sú tým istým výsledkom, a nakresliť pre oba jeden kotúč s prstencom by povedalo, že objednávka skončila, bez toho, aby povedalo ako. Nič v UML vás neobmedzuje na jeden.

02Príklad 2: pracovný postup, ktorý sa vracia späť#

Skutočné pracovné postupy zriedka bežia jedným smerom. Niečo sa zamietne, vráti sa a príde znova - a práve v tom spätnom prechode býva to zaujímavé pravidlo.

UML diagram stavového automatu redakčného postupu. Z počiatočného pseudostavu nad ním je článok v stave Koncept. Submit ho presunie do V recenzii. Approve ho presunie vpravo do Schválený a potom nadol do Publikovaný, ktorý dosiahne koncový stav. Reject presunie V recenzii nadol do Zamietnutý a revise vezme Zamietnutý späť vľavo do Koncept.

Prechod revise zo stavu Zamietnutý do Konceptje to, čo z tohto robí stavový automat, a nie kontrolný zoznam. Hovorí, že zamietnutý článok nie je hotový - vstupuje späť do toho istého cyklu, a akékoľvek počítadlo typu „dvakrát zamietnuté znamená eskalovať“ visí na tej šípke, nie na stave.

Všimnite si, že Zamietnutý má východ a Publikovaný nie. Stav bez odchádzajúceho prechodu a bez koncového stavu za ním je tvrdenie, že objekt tam zostane navždy, čo je občas pravda a častejšie opomenutie. Skontrolovať takto každý listový stav je dvojminútový posudok, ktorý nájde skutočné medzery.

Názvy spúšťačov sú udalosti v slovníku domény - submit, approve, reject, revise - nie názvy metód. To drží diagram čitateľný pre redaktorov, ktorí ten proces vlastnia, a to je publikum, ktoré vám vie povedať, že sa mýli.

03Príklad 3: dva východy, ktoré nie sú rozhodnutím#

Najčastejším zmätkom, keď niekto prechádza od diagramov aktivít k stavovým automatom, je, čo znamenajú dve šípky z jedného boxu.

Fragment UML stavového automatu. Stav Čaká sa na platbu má dva odchádzajúce prechody: pay lomka capture vedie do Zaplatená a timeout 72 hodín vedie do Vypršaná. Poznámka vysvetľuje, že sú to dva spúšťače, nie dve stráže, takže nič nemusí byť vyčerpávajúce - stav jednoducho čaká.

Toto sú dva spúšťače, nie dve vetvy rozhodnutia. Objednávka sedí v stave Čaká sa na platbu neobmedzene dlho; kam pôjde, rozhodne tá udalosť, ktorá príde prvá - pay, alebo časová udalosť timeout(72h). Nič nemusí byť vyčerpávajúce a nie je tu žiadne [else], lebo čakanie je legitímny výsledok.

To je opak diagramu aktivít, kde je token, ktorý dorazí k rozhodnutiu bez povolenej stráže, zastaveným procesom. Rovnako vyzerajúca geometria, opačná sémantika - a preto sa oplatí voľbu medzi tými dvoma notáciami robiť zámerne, nie zo zvyku.

04Kedy taký vôbec kresliť#

Stavový automat sa lacno kreslí a draho udržiava, takže otázku, či ten objekt vôbec má životný cyklus, sa oplatí položiť skôr než prvý box.

Siahnite po ňom, keď

  • Objekt má stavové pole s viac než dvoma hodnotami a pravidlá o legálnych zmenách.
  • Niektoré prechody sú zakázané a na tom zákaze záleží - vrátenia peňazí, zrušenia, schválenia.
  • Ten istý objekt sa dotýka viacero služieb a nezhodnú sa, čo môže robiť ďalej.
  • Vypršania alebo expirácie menia objekt bez toho, aby na ňom niekto konal.

Siahnite po niečom inom, keď

  • Proces prechádzajúci cez viacero objektov a rolí - to je diagram aktivít.
  • Trieda, ktorej stav sa odvodzuje z iných polí, namiesto toho, aby bol uložený.
  • Vlastná konfigurácia workflow enginu, ktorá už je zapísaným stavovým automatom.
  • Jeden diagram pokrývajúci dva objekty. Kreslite jeden automat na životný cyklus.

Ak proces preklenuje viacero účastníkov namiesto života jedného objektu, chcete diagram aktivít, alebo pre biznisové publikum BPMN. Test je jednoduchý: ak neviete pomenovať tú jedinú vec, ktorej stavy to sú, nie je to stavový automat.

05Čo si zapamätať#

Po jednom riadku na každé

  1. 01Obsahom sú popisky prechodov. Neoznačené šípky medzi stavmi nehovoria nič.
  2. 02Viac koncových stavov je normálne - zrušená a doručená sú obe terminálne a nie sú tým istým.
  3. 03Chýbajúce šípky sú miestom, kde sú chyby. Skontrolujte každú dvojicu, ktorú ste nenakreslili.
  4. 04Dve šípky zo stavu sú dva spúšťače, nie dve vetvy. Nič nepotrebuje [else].
  5. 05Jeden stavový automat na objekt so skutočným životným cyklom. Proces preklenujúci role je diagram aktivít.

06Časté otázky#

Aký je dobrý príklad stavového diagramu?

Životný cyklus objednávky: košík, zadaná, zaplatená, odoslaná, doručená, s vetvou zrušená zo stavu zadaná. Má šesť stavov, jeden spúšťač na prechod a dva rôzne konce, čím pokrýva všetko, čo sa od notácie bežne žiada.

Môže mať stavový diagram viac než jeden koncový stav?

Áno a zvyčajne by mal. Zrušená a doručená objednávka sú obe ukončené, ale nie sú to tie isté výsledky, a zvedenie oboch do jedného krúžku ten rozdiel skryje. UML počet koncových stavov neobmedzuje.

Ako sa v stavovom diagrame modeluje timeout?

Ako prechod, ktorého spúšťačom je časová udalosť, zapísaná napríklad timeout(72h) alebo after(72 hodín). Vychádza zo stavu, v ktorom objekt čaká, a mieri na to, čo vyprší. Stráž netreba - spúšťačom je samotný plynúci čas.

Čo sa stane, ak nie je povolený žiadny prechod zo stavu?

Nič, a je to správne. Stavový automat čaká vo svojom stave, kým nepríde spúšťač, takže stav bez povoleného prechodu je nečinný, nie pokazený. Je to opak diagramu aktivít, kde token bez východu znamená zaseknutý proces.

Má byť jeden stavový automat na triedu?

Najviac jeden a len pre triedy so skutočným životným cyklom. Ak má trieda stĺpec so stavom s viac než dvoma hodnotami a pravidlá, ktorá zmena je prípustná, nakreslite ho. Ak je stav odvodený alebo sa nastaví len raz, automat nič nepridá.

V tejto sérii

Súvisiace články

Všetky články