Návrhové vzory 2019
Situace:
- za X let máte X projektů. Dlouhodobě používáme Ionic, máme verzi 1, 3 a 4
- každý programátor má svůj styl, jednota není dostatečná. Ale není to bolestivé, jde o kosmetiku, věci fungují a dá se v nich vyznat
- vedou se diskuze, co je lepší a proč, trpí ega vývojářů
- proces codereview přispěl k zvýšení kvality. Chybí pravidla podle kterých by se věci pri codereview posuzovaly
- standard má přinést technologický pokrok. Ale ne dogma, aby zastavil rozvoj.
Pro začátek vezmeme nejčastější funkce:
1. načtení seznamu produktů
- obrazovka se seznamem, produkt má obrázek, titulek, popis a cenu - řeší šablona .html
- další vrstva je controller .ts
- další vrstva je service .ts
- data se berou z REST API
Vyřešit:
- na úrovni controlleru použít await nebo observable.subscribe - jaké jsou v tom praktické rozdíly, kdy použít který přístup?
2. ošetření chyb z API
- chyba 500, na kterou se reaguje zobrazením hlášky uživateli
- chyba 403, když např. vypršel token, chyba se řeší interně, bez interakce s uživatelem
Vyřešit:
- jak předávat chyby ze service do controlleru
- jak řešit obnovení tokenu
3. activity indikátor, točící kolečko
- pokud volám server a blokuju tím uživatele v činnosti, potřebuji zobrazit informaci v UI, např. activity indikátorem
Vyřešit:
- kde indikátor zobrazovat
- kde a kdy indikátor skrýt
- vzít v potaz ošetření chyb
4. podpora offline
- mobilní aplikace může fungovat bez připojení k internetu
- pokud jsem offline, zobrazím data z local storage
- pokud se připojím, měl bych si je obnovit
Vyřešit:
- řeší se na úrovni service?
- jak informovat, že už jsem online?
- je možné zobrazit nejprve data z local storage, potom poslat požadavek na server a když data dostanu, udělat refresh - aplikace CNG
5. zobrazení dummy obsahu
- některé pokrokové aplikace, např. facebook zobrazují šedý prázdný obsah do doby než se načtou reálná data
- je to lepší řešení než zobrazit prázdnou stránku nebo čekat na načtení a pak zobrazit všechno
Vyřešit:
- koncept, jak to řešit na všech vrstvách
Další body:
6. zobrazení dlouhého seznamu a postupné načítání
7. zobrazení detailu
8. uložení detailu
9. smazání detailu
10. výpočet, úprava dat ze serveru před zobrazení, např. jiné pojmenování atributů (vyuka:jmeno -> jmeno)
11. filtrování
12. řazení
13. vyhledávání
14. generování kódu ze swaggeru