Dekompozice problému
Odkazy
app.diagrams.net
app.diagrams.net
Je pátek, 8:40 ráno.
V 9:00 začíná Black Friday.
Vývojář e-shopu právě oznámil:
„Objednávkový systém funguje. Všechno jsem dal do jedné velké části OBJEDNÁVKA.“
Ta jedna část teď:
pracuje s košíkem,
kontroluje sklad,
počítá cenu,
ověřuje slevový kód,
kontroluje údaje zákazníka,
vybírá dopravu,
komunikuje s platbou,
vytváří objednávku,
upravuje sklad,
posílá potvrzení.
A nikdo už pořádně neví:
co přesně za co odpovídá
co se má stát při chybě
kde něco testovat
a co se rozbije při další změně
Tvým úkolem je systém před spuštěním zachránit.
Dnes pracuješ jako:
návrhář softwarového řešení
Nebudeš programovat.
Nejdřív musíš velký problém:
ROZLOŽIT NA MENŠÍ ČÁSTI
Tak, aby každá měla:
jasnou odpovědnost
jasný vstup
jasný výstup
a:
rozumné vazby na ostatní části
Představ si, že celý objednávkový systém dnes tvoří jediná část:
Ta dělá úplně všechno.
Tvým prvním úkolem je ji rozdělit.
Navrhni:
minimálně 7 a maximálně 10 smysluplných částí systému
Každá část musí:
řešit jednu hlavní oblast problému,
mít krátký a výstižný název,
dávat smysl samostatně.
Pozor
Toto není vhodné rozdělení:
Frontend
Backend
Databáze
To jsou technologické vrstvy.
Ty potřebuješ rozdělit:
samotný problém objednávky.
Stejně tak není vhodné vytvořit desítky miniaturních částí typu:
Přečti jméno
Přečti ulici
Přečti PSČ
Hledej rozumnou úroveň detailu.
Při vytváření návrhu počítej s tím, že systém musí umět:
pracovat s položkami v košíku,
zjistit dostupnost požadovaného množství,
pracovat s cenou a případnou slevou,
získat potřebné údaje zákazníka,
vyřešit způsob dopravy,
provést nebo vyhodnotit platbu,
vytvořit objednávku,
správně reagovat na změnu skladu,
informovat zákazníka o výsledku.
Ty rozhoduješ:
jak přesně systém rozdělíš.
Použij:
tldraw
nebo:
diagrams.net
nebo:
PowerPoint
Vytvoř diagram:
Doprostřed nebo nahoru dej:
OBJEDNÁVKOVÝ SYSTÉM
Pod něj rozmísti všechny své části.
Například jako:
krabičky / bloky / uzly
Části následně propojuj:
šipkami
Tak, aby bylo vidět:
která část na kterou navazuje
a:
co se mezi nimi předává
U minimálně 4 šipek napiš konkrétní význam.
Například:
položky + množství
ověřená cena
výsledek platby
ID objednávky
Nepotřebuješ kreslit UML.
Diagram musí být:
logický, přehledný a pochopitelný.
Výsledek exportuj jako obrázek a vlož do dokumentu.
Vyber minimálně:
5 částí svého systému
a vytvoř pro ně tabulku:
Část systému | Odpovědnost | Vstup | Výstup |
|---|---|---|---|
Co má tato část skutečně řešit?
Jaké informace potřebuje?
Co předá další části nebo jaké rozhodnutí vytvoří?
Nepoužívej obecné fráze typu:
„něco zkontroluje“
nebo:
„zpracuje data“
Buď konkrétní.
Dobrý návrh musí fungovat nejen tehdy, když je všechno perfektní.
Teď svůj diagram otestuj.
U každého scénáře napiš:
kterými částmi systému případ projde
a:
ve které části nastane klíčové rozhodnutí
Zákazník:
má zboží v košíku,
všechno je skladem,
zadal platné údaje,
vybral dopravu,
platba proběhla úspěšně.
Napiš průchod:
START → ______ → ______ → ______ → ______ → KONEC
A odpověz:
Kde vznikne finální objednávka?
Kdy může zákazník dostat potvrzení o úspěchu?
Zákazník objednává:
3 kusy produktu
Na skladě jsou ale pouze:
2 kusy
Napiš:
Která část systému musí problém objevit?
Jaký vstup k tomu potřebuje?
Jaký výstup vytvoří?
Má systém pokračovat rovnou k platbě: ANO / NE
Co se má stát dál?
Všechny předchozí kontroly projdou.
Platební brána ale vrátí:
PLATBA ZAMÍTNUTA
Napiš:
Která část problém zachytí?
Jaký výstup vytvoří?
Smí systém označit objednávku jako zaplacenou: ANO / NE
Co může zákazníkovi nabídnout dál?
Níže jsou čtyři návrhy.
Rozhodni:
DOBRÁ DEKOMPOZICE
nebo:
ŠPATNÁ DEKOMPOZICE
A krátce vysvětli proč.
Frontend
Backend
Databáze
Verdikt:
Košík
Sklad
Cena
Zákazník
Doprava
Platba
Objednávka
Potvrzení
Verdikt:
Napiš jméno
Napiš ulici
Napiš město
Napiš PSČ
Klikni pokračovat
Klikni zaplatit
Verdikt:
Jedna část:
UDĚLEJ OBJEDNÁVKU
Ta kontroluje sklad, počítá cenu, řeší platbu, dopravu i potvrzení.
Verdikt:
Je 8:55.
Pět minut před spuštěním Black Friday přichází nový požadavek:
„Zákazník musí mít možnost krátce po vytvoření objednávku zrušit.“
Do svého diagramu přidej tuto změnu.
Rozhodni:
ANO / NE
Pokud ano:
Jak se bude jmenovat:
Pokud ne:
Která existující část převezme odpovědnost:
Promysli minimálně:
stav objednávky
platbu
sklad
Napiš krátce:
Co se změní:
Co se může muset stát:
Co se může muset stát:
Do System Map přidej novou logiku jinou barvou.
Musí být vidět:
kterých částí se nový požadavek dotkl.
Vyber ze svého návrhu:
dvě dvojice částí
u kterých by někdo mohl říct:
„Proč je vlastně nespojíš do jedné?“
Část A:
Část B:
Napiš:
Proč je podle tebe rozumné držet je odděleně:
Část A:
Část B:
Napiš:
Proč je podle tebe rozumné držet je odděleně:
Neexistuje pouze jedno správné rozdělení.
Důležité je:
umět hranice svého návrhu obhájit.
Dokonči vlastními slovy:
Dekompozice není jen rozdělení problému na co nejvíce částí. Dobrá dekompozice znamená…
Odpověz ve:
2–3 větách
Odevzdání
Hotovou práci odevzdej jako jeden soubor DOCX nebo PDF do připravené složky v Microsoft Teams.
Soubor pojmenuj:
Příjmení_Jméno
Odevzdej nejpozději do konce dne.