Bankový systém v UML
Väčšina bankových príkladov modeluje účet ako zostatok s metódou vlož, čo je presne to jediné, čo žiadna banka nerobí. Tu je verzia postavená na podvojnom účtovníctve a k tomu stavový automat, ktorý rozhoduje, čo smie prevod urobiť ďalej.
8 min čítaniaUML 2.5.133 z 35
Krátka odpoveď
- Zostatok modelujte ako odvodenú operáciu, nie uložený atribút. balance() sčíta pohyby; uložená kópia nemá ako dokázať, že je správna.
- Prevod je jedna transakcia zložená presne z dvoch pohybov so súčtom nula. Šípka medzi účtami stráca atomickosť, ktorú má model chrániť.
- Bankový systém potrebuje diagram tried na účtovnú knihu, stavový automat na každý životný cyklus a diagram komponentov na hranicu so schémami.
- Bankomat je kanál a patrí k ostatným kanálom. Postaviť ho vedľa účtov je klasický školský diagram.
01Účet nemá zostatok#
Takmer každý bankový príklad na internete dá triede Account atribút balance a dvojicu metód, ktoré k nemu pripočítavajú a odpočítavajú. Je to prvá vec na zmazanie, lebo žiadna účtovná kniha, ktorá musí byť auditovateľná, takto nefunguje.
Uložený zostatok je druhá kópia faktu, ktorý zápisy už obsahujú. Dve kópie jedného faktu si môžu protirečiť, a keď si protirečia - čiastočné zlyhanie, opakovaná správa, migrácia - nedá sa zistiť, ktorá je správna, lebo zostatok nenesie históriu, oproti ktorej by sa dal overiť. Odvodiť ho, ako balance() na obrázku vyššie, robí rozpor nemožným už konštrukciou.
02Prevod je jedna vec s dvoma účinkami#
Kompozícia vpravo na hlavičkovom obrázku je druhé nosné rozhodnutie. Transaction je zložená z práve dvoch zápisov - násobnosť hovorí 2, nie 0..* - a konvenciou dávajú v súčte nulu: peniaze z jedného účtu odídu a na druhý prídu.
Nakresliť asociáciu z Account rovno na Account, čo je zjavný prvý pokus, stratí obe tie polovice. Stratí atomicitu, lebo dve šípky môžu existovať nezávisle a prevod sa nemôže stať napoly. A stratí referenciu: transakcia je vec, na ktorú sa zákazníci pýtajú podľa čísla, rozporujú ju a stornujú, čo znamená, že je entitou, a nie čiarou medzi dvoma inými.
Plný kosoštvorec potom hovorí, že zápisy zomrú s transakciou. To je správne a je to zároveň obmedzenie pre kód: nemôžete zmazať polovicu prevodu a storno je nová transakcia, nie úprava tej starej. Sprievodca diagramom tried má kompletné pravidlá, kedy je kosoštvorec plný.
03Čo smie prevod urobiť ďalej#
Stavový automat si zaslúži miesto vždy, keď má objekt životný cyklus, od ktorého závisia pravidlá, a pohyb peňazí je archetyp. Hodnotou nie sú tie štyri boxy, ktoré by uhádol každý - sú to prechody, ktoré chýbajú.
Settled nemá odchádzajúci prechod. To hovorí, že vyrovnaný prevod je konečný a storno je iná transakcia, nie zmena stavu - čo je to isté tvrdenie, aké spravila kompozícia na doménovom modeli. Rejected ho nemá tiež: schválenie po zamietnutí začína nový prevod. Stráže robia zvyšok explicitným - reject [limit]pomenúva prečo, a diagram, ktorý hovorí len "reject", necháva dôvod na čitateľa.
Po jednom riadku na každé
- 01Zmažte atribút balance - odvoďte ho zo zápisov, inak si dve kópie jedného faktu budú protirečiť.
- 02Prevod je jedna Transaction zložená z práve dvoch Posting, ktoré dajú v súčte nulu.
- 03Kompozícia, nie asociácia: nemôžete zmazať polovicu prevodu a storno je nový prevod.
- 04Životný cyklus modelujte tam, kde od neho závisia pravidlá, a chýbajúce prechody čítajte prvé.
- 05Pomenujte stráž na prechode; samotné "reject" necháva dôvod na čitateľa.
- 06Kanály - bankomat, aplikácia, pobočka - patria na diagram komponentov, nie do účtovnej knihy.
Pre to isté spracovanie inej domény pozrite e-shopovú architektúru, namodelovanú. Pre dátovú polovicu účtovnej knihy - kľúče, kardinalitu a schému pod tým - pozrite ER diagramy.
04Časté otázky#
Ako sa má v UML modelovať zostatok na účte?
Ako odvodená operácia, nie ako uložený atribút: balance() sčíta pohyby na účte. Uložený zostatok je druhá kópia údaja, ktorý už kniha obsahuje, a v deň, keď sa obe rozídu, sa nedá zistiť, ktorá je nesprávna - presne preto si ho skutočné účtovné knihy nedržia.
Ako zobraziť prevod medzi dvoma účtami?
Ako jednu transakciu zloženú presne z dvoch pohybov, jedného záporného a jedného kladného, ktoré dávajú súčet nula. Šípka z jedného účtu na druhý stráca fakt, že prevod je jedna atomická vec s dvoma dôsledkami - a práve túto atomickosť má celý model chrániť.
Aké UML diagramy potrebuje bankový systém?
Diagram tried na účtovnú knihu, stavový automat na čokoľvek so životným cyklom - prevody, karty, žiadosti - a diagram komponentov na hranicu s platobnými schémami a jadrovým bankovníctvom. Sekvenčné diagramy pomôžu pri dvoch či troch tokoch, kde je poradie naozaj sporné.
Má byť bankomat na tom istom diagrame ako účty?
Nie. Bankomat je kanál a patrí na diagram komponentov alebo nasadenia k ostatným kanálom; diagram účtovnej knihy je o tom, čo je transakcia. Miešanie oboch vyrobí klasický školský diagram, kde je hardvérové zariadenie v asociácii s účtovným pojmom.
V tejto sérii
- 01Čo je UML?
- 02Symboly UML
- 03Výber diagramu
- 04Diagramy tried
- 05Príklady diagramov tried
- 06Ako nakresliť diagram tried
- 07Symboly diagramu tried
- 08Sekvenčné diagramy
- 09Príklady sekvenčných diagramov
- 10Ako nakresliť sekvenčný diagram
- 11Diagramy prípadov použitia
- 12Príklady prípadov použitia
- 13Diagramy aktivít
- 14Príklady aktivít
- 15Stavové diagramy
- 16Príklady stavových diagramov
- 17Diagramy komponentov
- 18Príklady komponentov
- 19Kreslenie diagramu komponentov
- 20Symboly komponentov
- 21Diagramy nasadenia
- 22Príklady nasadenia
- 23Diagramy objektov
- 24Diagramy balíkov
- 25Diagramy zloženej štruktúry
- 26Komunikačné diagramy
- 27Sekvenčný vs komunikačný
- 28Časové diagramy
- 29Diagramy prehľadu interakcií
- 30Diagramy profilov
- 31UML pomocou AI
- 32Príklad e-shopu
- 33Príklad banky
- 34Príklad mikroslužieb
- 35Príklad AWS
Súvisiace články
Diagramy štruktúry
Diagramy správania
Prax modelovania
Základy
Prax modelovania
Prax modelovania