Článek
Zadání: „Ať vidí, co mají vidět a nic více.“ Jednoduché, že? Omyl. Tohle je jeden z nejzrádnějších úkolů, co existuje.
1. Prázdný seznam? To znamená VŠECHNO! V normálním životě, když vidíte prázdný papír, znamená to, že na něm nic není. Žádné informace. V našem softwaru to ale funguje přesně obráceně. Proč? Protože jinak by bez „úvodního nastavení“ nefungovalo nic. A všichni by nadávali na nepraktické programátory. Po spuštění to musí makat. Zákazy se zadají později nebo vůbec.
Ale je to nelogické. A hlavně se to fakt špatně programuje. Když v nastavení necháte kolonku „Povolené sklady“ prázdnou, program si to vyloží jako: „Povoluji úplně všechny sklady na světě.“ Aby administrátor nemusel ručně zaškrtávat 20 skladů pokaždé, když zakládá novou pobočku. Když nechá pole prázdné, pobočka automaticky vidí všechno.
ALE – jakmile tam napíšete jediné číslo (třeba "3"), logika se otočí a program začne být přísný: povolí jen sklad č. 3 a všechny ostatní skryje. Programátor musí vymyslet, jak uživateli obrovským písmem vysvětlit, že prázdné políčko = totální přístup. Protože jinak si uživatel myslí, že systém má poruchu, a volá na podporu. Dobře, musí se řešit UX (uživatelský zážitek) tak, aby bylo vše jasné a vypadalo to logicky a nikdo neudělal chybu. Musí tam někde svítit nápis „Všechny sklady přístupné“ až do okamžiku, kdy zadáme první zákaz.
2. Skladů přibývá – a co teď? Představte si, že máte v systému 5 skladů. Všechno běží, každá pobočka má svá nastavení. Pak přijde šéf a řekne: „Otevíráme 6. sklad!“ Co se stane s vašimi starými pobočkami, které měly pečlivě nastavené povolené sklady? Mají najednou vidět ten nový sklad, nebo ne? Musíte udělat úvahu. Pokud sklady doteď nikdo neřešil a mají povolené všechny, nejspíše chtějí vidět i ten nový. A pokud mají zákazy a firma část skladů blokuje, tak naopak ať si ten sklad povolí pokud chtějí, ale ať vidět není. Musíte pokrýt mini flegmatickou firmu i přísnou hierarchii. Jediným procesem.
Programátor musí zařídit, že: Když má pobočka nastavené konkrétní povolené sklady (třeba 1,2,3), tak se jí nový sklad č. 6 nepřidá automaticky a je rovnou zakázán. Musí ho tam někdo ručně dopsat, protože jinak by se porušilo původní omezení. Ale když má pobočka nastaveno prázdné pole (tedy "všechno"), tak nový sklad uvidí automaticky. Protože „všechno“ znamená vážně všechno, i to, co přibude v budoucnu.
Jenže ďábel je skryt v detailu. Zakázaných skladů bude téměř vždy méně než povolených, většina uživatelů systému bude mít vždy povolené vše. V logice celého systému už neprojde, že prázdné je všechno, už se musí vyjmenovávat co povolené je a co není. Tedy místo „povolené sklady“ máte v datech kolonku „zakázané sklady“. Reverzní přístup. Pro selské myšlení fakt pecka. Tím dosáhnete, že data budou vždy menší a rychlost vyhodnocení větší. Je to správné, ale generuje to práci programátora. Jako vždy když je to pro uživatele jednoduché, tak pro tvůrce je to o to větší peklo. Když někdo v administraci založí nový sklad, musí program prohledat všechny pobočky a tam, kde je prázdno, nechat prázdno. A tam, kde je něco vypsaného, tam přidat nový sklad do seznamu zakázaných. A proč takto složitě?
3. Největší peklo: Zákazy, ne povolení. Tohle je naprostý grif, který uživatele šetří, ale programátora přivádí k šílenství. Většina systémů funguje takto: „Tady máš seznam skladů. Zaškrtni ty, které tato pobočka smí vidět.“ Náš systém funguje obráceně, pro člověka jsou logičtější zákazy než povolení. Když neuděláte nic, ukáže všechny. Že není nic povoleno, to je totiž jasný nesmysl a správný program musí přemýšlet za uživatele. Neměl čas to vyplňovat, povolíme mu všechny.
Ale kdo má zvládnout konzistenci? To víte, že se objeví chyby. Zadávám povolené, kontroluji zakázané. To je šílenství. Když si administrátor otevře obrazovku, vidí pěkně přehledně: sklad č. 1 – POVOLEN, sklad č. 2 – POVOLEN. Ale v pozadí (v souboru) se ukládá pouze to, co je ZAKÁZÁNO. Programátor musí napsat kód, který v okamžiku uložení udělá toto: Podívá se, co uživatel povolil. Podívá se na všech 20 existujících skladů. Spočítá, které sklady uživatel nepovolil. A nakonec uloží do souboru jen ta zakázaná čísla.
Když uživatel příště otevře obrazovku, program musí zase obráceně vzít seznam zakázaných skladů, porovnat ho se všemi existujícími sklady a ukázat mu to jako pěkný seznam povolených. Je to jako kdybyste měli diář, kam si píšete, co NESMÍTE udělat, ale pak to čtete jako seznam toho, co SMÍTE. Matoucí, že?
4. Stanice je šéf, ale obsluha má své vlastní sklady. Tady přichází další past: Každá stanice (pobočka) má svá omezení – třeba pobočka v Brně nevidí sklady v Praze. To dává smysl. Ale každá obsluha (zaměstnanec) může mít svá vlastní dodatečná omezení – třeba pan Novák nevidí sklad s drahým zbožím, protože je ve výpovědi, ale jeho kolegové ano. Stanice je nadřazená obsluze. Když stanice zakáže sklad č. 5, tak ho neuvidí nikdo, ani pan Novák, ani jeho šéf. Je to jako zámek na vratech – když jsou zamčené, nikdo neprojde. Ale nejvyšší šéf má výjimku. Může administrovat z jakékoliv stanice, kam přijel na inspekci. Zase peklo. Výjimky jsou zlo. Přece sebou nebude tahat svůj notebook. Co když ho zapomněl, přeci mu nezakážeme pracovat, je to šéf. Tato podmínka musí projít všemi pravidly. Kdo si to neumí představit, ten je vlastně šťastný člověk. Mluvíme o mentálním modelu systému.
Ale pozor – když se na stanici založí nový zaměstnanec (nová obsluha), program si automaticky zkopíruje práva té stanice do jeho profilu, aby administrátor nemusel vše nastavovat od nuly. Pak to ale může dodatečně změnit. A programátor musí zařídit, aby si systém pamatoval: Které sklady jsou zakázané pro celou stanici (platí pro všechny). Které sklady jsou zakázané jen pro konkrétního zaměstnance (platí jen pro něj). A při každém přihlášení udělal průnik – ukázal jen ty sklady, které povoluje stanice ZÁROVEŇ s tím, co povoluje zaměstnanec.
A co když pobočka chce své vlastní sklady? Někdy chce mít pobočka úplně vlastní sklady, které nikdo jiný nevidí. Třeba sklad č. 7 existuje jen v Brně a v Praze ho nesmějí nikdy vidět. Stejné zboží, stejné kódy, časem by se někdo spletl a dal věci na ten špatný. Když spolu ty firmy nesouvisí, ale mají společný jen věrnostní systém. Vše izolované na úrovni dat nikoliv filtrů. I to je běžný požadavek. Filtr může selhat nebo prolomit, data na serveru nikdo neprolomí.
K tomu slouží přepínač modulu. Vypadá to jako jednoduché tlačítko: Centrální režim – všechny pobočky vidí stejné společné sklady nebo jiné moduly. Lokální režim – každá pobočka má své vlastní sklady, oddělené od ostatních. Je izolovaná. Když administrátor přepne pobočku do lokálního režimu, tak se změní celý systém ukládání dat. Místo aby program četl v databázi „sklady“ (společný pro všechny), začne číst soubor „sklady007“ (jen pro pobočku č. 7). Programátor musí na stovkách míst v kódu ošetřit, aby si program pokaždé ověřil: „Jsem v centrálním, nebo lokálním režimu? Podle toho vyber správný soubor.“ Všechno se změní, ale zvenku to vypadá stejně.
Takže co z toho plyne? Když se na to podíváte zvenčí, vypadá to jako pár zaškrtávacích políček v administraci. Ve skutečnosti je to ale logistický hlavolam: Prázdné pole = všechno povoleno (přesně naopak, než by člověk čekal). Ukládají se zákazy, ale zobrazují se povolení (reverzní logika). Stanice šéfuje obsluze (ale obsluha má vlastní výjimky). Přidání nového skladu musí ošetřit všechny staré pobočky. Přepnutí na lokální režim změní cestu k datům na stovkách míst.
Programátor nestojí před úkolem „udělej obrazovku“. Stojí před úkolem navrhnout logiku, která bude dávat smysl administrátorovi, běžnému uživateli i serveru, který čte data a nezpomalí jej. A proto, když uslyšíte: „Vždyť je to jednoduché, jen to nastavte,“ programátor potichu otevře poznámkový blok a začne si kreslit šipky, průniky, výjimky a podmínky. Protože v tom „jednoduchém“ nastavení se skrývá celé šílenství toho, kdo smí vidět co a kde. A to je na měsíc práce a ladění chyb.
Zdroj: https://jirikoudela.eu/






