• Nebyly nalezeny žádné výsledky

Tato kapitola obsahuje jednotlivé technologie použité pro vývoj prototypu aplikace, včetně jejich konkrétního využití v řešení.

2.2.1 Javascript

Tento jazyk byl stvořen z potřeby provádět skripty přímo v HTML dokumentu. V roce 1995 se stal Javascript novinkou a rychle se začal utvářet do podoby, se kterou budou budoucí vývojáři spokojení. Jeho hlavními pilíři, které pomohly k úspěchu, se staly následující body.

Syntaxe podobná Javě

Jedním z klíčových kroků k vytvoření Javascriptu byla tendence napodobit syntaktický zápis nejpoužívanějšímu jazyku pro programátory appletů – Javě. Vývojáři, kteří chtěli přejít od Javy k Javascriptu byli příjemně překvapení, jelikož syntaxe pro psaní aplikací a skriptů byla velmi podobná. Důležitým vylepšením byla i možnost psát kód bez tříd, typových deklarací a nutnosti používat středník na konci výrazu.

Události pro HTML elementy

Dalším významnou součástí Javascriptu jsou takzvané „události“, které umožňují elementům jednoduchou interakci s uživatelem. Například tlačítko používá metodu

„onClick“, která slouží k aplikování funkce, která se má vykonat po jeho stisknutí.

Formuláře umí zpracovávat zaznamenaná data, která uživatel zadal do příslušných polí pomocí metody „onSubmit“. V dnešní době moderních prohlížečů mají vývojáři s pomocí Javascriptu velmi flexibilní a téměř úplnou kontrolu nad veškerými událostmi, které na stránce vzniknou.

Objekty bez tříd

Třetí vlastností Javascriptu je možnost psaní objektů bez deklarace třídy. Jelikož Javascript není typovaný jazyk, mohou se zde vytvářet primitivní objekty bez nutnosti specifikování jejich přímé třídy. Pro takovou funkci byly vytvořeny takzvané prototypy, které se automaticky přidávají ke každé metodě. Interní engine aplikuje dědičnost pro pohodlné používání v kódu. Programátor tedy nemusí nic řešit a může vytvářet anonymní objekty velmi jednoduše.

Generování HTML

Poslední důležitou známkou Javascriptu je možnost vytvářet kusy HTML kódu kdekoliv v rámci dokumentu stránky. Jinými slovy lze jednoduše generovat například tlačítka, zadávací pole nebo celé tělo stránky pomocí krátkých skriptů, což přináší programátorům výhody při vytváření dynamických stránek a interaktivních aplikací, které pomáhají ke zlepšení uživatelských zkušeností (UX) při používání stránky. (GOODMAN, 2007)

Využití v prototypu

Javascript slouží jako základní programovací jazyk, ve kterém běží prototyp aplikace.

Jelikož původní aplikace funguje jako „fullstack“ Javascriptu na straně API i na straně klienta, je částečné přepoužití kódu výhodou. Pro vylepšení stávajícího kódu a zvýšení škálovatelnosti a údržby je pro konkrétní implementaci použita nadstavba Typescript.

2.2.2 Typescript

Typescript je jazyk, který byl stvořen společností Microsoft a vydán jako open-source projekt pod licencí Apache 2.0. Jeho zaměřením jsou především Javascriptové aplikace, které jsou určeny k vysoké škálovatelnosti a robustnímu zpracování. Typescript přináší statické typování, které umožňuje kompilátoru najít syntaktické a typové chyby již během kompilace. To znamená, že výrazně zamezuje vývojářům udělat chyby ve volání funkcí s nesprávnými argumenty nebo měnit přiřazování odlišných typů do stejné proměnné.

Základní specifikace

Jde o nadstavbu Javascriptu, která přináší statické typování. Typescript se při kompilaci transpiluje do čistého Javascriptu, který lze spouštět v kterémkoliv prohlížeči, ale i na serveru. Dokonce je možné za pomocí Typescriptu psát i nativní aplikace. Jazyk se hodí zejména do škálovatelných projektů v produkčním prostředí, kde jakákoliv větší chyba může způsobit střední až velké dopady na společnost. Typescript lze využít i na serverové části, které se nejčastěji používají k výkonným API.

Prototypová dědičnost

Typescript se snaží vyřešit některé nedostatky Javascriptu. Jedním z nich je nemožnost využívat jmenné prostory a jakoukoliv formu rozhraní. Jazyk zavádí do tohoto světa třídy, jmenné prostory, moduly a rozhraní, což umožňuje programátorům převádět existující znalosti mezi jednotlivými projekty. Zároveň přidává možnost automaticky vytvářet stejná rozhraní mezi různými jazyky, které podporují typování.

Rovnost a typové záměny

Další z možných nevýhod Javascriptu je rovnost typů proměnných a jejich jednoduchá záměna. Nejčastěji se zaměňují typy „string“ a „number“, neboli řetězec a číslo. Při psaní může vývojář způsobit i fatální chybu, pokud například chce sestavit výraz a použije různé typy, které skloubí dohromady. V Typescriptu tato chyba není možná. Kompilátor nepustí vývojáře spojit dva odlišné typy do jednoho.

Podpora vývojových prostředí

Jazyk přináší podporu do mnoha vývojových prostředí jako jsou například Visual Studio nebo WebStorm. S pomocí statického typování je možné využívat takzvaný „IntelliSense“, který vývojářům přináší napovídání při psaní kódu podobně jako je to například u objektově orientovaných jazyků, jako jsou například Java nebo C#. (FENTON, 2018)

Využití v prototypu

Typescript je využit jako hlavní nástroj pro vývoj prototypu. Jeho významné výhody, jako je škálovatelnost, údržba nebo statické typování jsou velmi cenným prostředkem pro vývoj robustního systému. Celá aplikace je během sestavení („build“) transpilována do Javascriptu, který běží v prostředí Node.js.

2.2.3 Node.js

Node.js je platforma, která se používá k vývoji webových aplikací, API serverů nebo mikroservisní architektury. Hlavní výhodou je poměrně snadná škálovatelnost a vysoký výkon provádění operací v kombinaci Javascriptu, asynchronních vstupů a výstupů a anonymních funkcí. Node.js je v dnešní době populární volbou při vývoji nových moderních webových aplikací, jelikož umožňuje psát Javascript na straně klienta i serveru. To znamená, že je pro zaměstnavatele výhodnější hledat vývojáře, kteří ovládají právě jeden jazyk, a poté pracovat jako takzvaný „fullstack“, tedy vývoj jak klientské, tak serverové strany.

Nástroje pro vývoj

Platforma je velmi populární pro vytváření nových nástrojů využívající příkazovou řádku pro pomoc při vývoji softwaru. Jedním z těchto nástrojů je například „Babel“, který je běžně používán jako transpilační engine pro moderní syntaxi Javascriptu. To znamená, že lze používat nejnovější syntaxi a zároveň zachovat kompatibilitu pro starší systémy. Dalším populárním nástrojem je „PostCSS“, který pomáhá vývojářům s běžnou prací se styly.

Jedním z příkladů je optimalizace stylů pro všechny prohlížeče, nebo automatická korekce sémantických chyb.

Testování uživatelského rozhraní

Výhodou využití Node.js je jeho rozsah možností práce s prohlížečem v kombinaci s operačním systémem. To poskytuje dostatek funkcionality pro testování (nejen) uživatelských rozhraní. Jedním z frameworků, který umožňuje testování je například

„Cypress“. Tyto frameworky slouží k simulaci činností uživatele, který se pohybuje po webové stránce. Jejich výhodou je, že se nemusí jejich výkonný kód transpilovat do Javascriptu, jelikož v něm přímo pracuje. Mezi další populární testovací frameworky patří i Selenium pro Javascript, WebdriverIO, Puppeteer nebo Nightwatch.js. (HERRON, 2018)

Využití v prototypu

Node.js slouží v projektu jako prostředí, ve kterém běží celý prototyp aplikace. Jako základní nástroje, které pomáhají při vývoji, jsou využity zejména knihovny třetích stran jako je například „Webpack“ pro sestavení produkční verze aplikace, Babel pro transpilaci moderního Javascriptu, „Prettier“ pro přehlednost kódu a jeho formátování nebo „Eslint“

jako „lintovací“ nástroj pro udržení konzistence pravidel psaní kódu. Do prostředí Node.js je zapojena i SQL databáze pro uchování dat vyvíjeného prototypu, která využívá ovladače a propojení MySQL.

2.2.4 Relační databáze a SQL

Robustní systémy vyžadují uchovávání dat v databázích, které poskytují dostatečný výkon, škálovatelnost, snadnou údržbu a bezpečnost. Databáze slouží pro organizaci a správu dat.

Typů zpracování dat v databázi je mnoho, patří sem například relační, objektové nebo NoSQL. Relační databáze jsou nejčastěji používány právě pro systémy, které obsahují mnoho vazeb mezi entitami. V dnešní době existuje mnoho systémů pro řízení báze dat, které umožňují snadnou manipulaci a zobrazení dat, včetně uživatelského rozhraní. Tyto systémy pracují s dotazovacím jazykem SQL, pomocí kterého lze s databází komunikovat.

Tabulka jako entita

Ve světě relačních databází představuje entitu tabulka. Tabulka se skládá ze sloupců a řádků, které obsahují uložená data. Každá tabulka má jako unikátní identifikátor název, například pokud by tabulka obsahovala seznam projektů, její název (v angličtině) by mohl být „Projects“. Každý sloupce představuje atribut, který má daná entita obsahovat.

Z předchozího příkladu sem lze zařadit jméno projektu nebo jeho popis. Řádky tabulky představují jednotlivé záznamy dat s konkrétními hodnotami. Každá hodnota je reprezentována jako pole.

Relace pomocí klíčů

Vazby mezi entitami v relační databázi se realizují pomocí takzvaných klíčů. Pokud je zapotřebí propojení entit, musí mít každá z tabulek unikátní identifikátor, který se nazývá primární klíč. Pomocí něj lze propojit tabulky mezi sebou. Například, pokud by tabulka

„Projects“ vyžadovala pro každý záznam odpovědnou osobu, která je uložená v tabulce

„Persons“, přidá ke svým sloupcům takzvaný cizí klíč neboli primární klíč připojené tabulky.

Tím je zaručeno, že i při změně dat nedojde k nekonzistenci mezi záznamy.

Strukturovaný dotazovací jazyk – SQL

Relační databáze komunikují s uživatelem pomocí dotazovacího jazyk SQL. Pokud uživatel chce získat data z databáze, potřebuje zapsat dotaz pomocí krátkého skriptu. Jedním z nich jsou „SELECT“ a „FROM“. Tyto výrazy umožňují zobrazit požadovaná data z konkrétní tabulky. Pro manipulaci s daty jako je přidání, změna nebo odebrání, lze využít „INSERT“,

„UPDATE“ a „DELETE“. Důležitou součástí dotazu by měla být i podmínka, která data se mají zobrazit nebo změnit. V tomto případě se používá „WHERE“. Výsledný dotaz může vypadat například takto. (DONAHOO, a další, 2013)

SELECT name FROM Projects WHERE id = 1 Využití v prototypu

Relační databáze MySQL je použita jako hlavní uložiště dat. Volba tohoto typu zahrnuje možnost škálovatelnosti a zejména správu množství vazeb mezi moduly. Další výhodou je zachování stejného typu databáze, jako v původním systému.

2.2.5 Objektově relační model (ORM)

Javascript používá pro jakékoliv složitější datové struktury objekty a pole. Je tedy žádoucí, aby bylo možné mapovat objekty na záznamy z databáze a zároveň automatizovat některé databázové dotazy. Objektově relační modely se snaží o propojení obou světů objektově orientovaných jazyků a dotazovacích jazyků pro databáze. Pomocí nástrojů lze docílit jednoduchého a zejména objektově orientovaného způsobu práce s databází. To s sebou nese mnoho výhod, jako je například optimalizace složitých dotazů za účelem zvýšení výkonu.

Komunikace mezi systémy

Výhodou využití ORM je jeho univerzální komunikace s jakýmkoliv operačním systémem a prostředím bez nutnosti specifické konfigurace nebo vytváření speciálních ovladačů pro každé prostředí. ORM představuje vrstvu, které dokáže interně změnit nastavení podle aktuálního prostředí.

Přenositelnost

Jedním ze znaků ORM je i jeho vysoká přenositelnost mezi jednotlivými typy databází a jejich druhy, jako jsou například MySQL, Oracle DB nebo MSSQL. ORM automaticky změní databázové dotazy na korektní syntaxi podle vybrané databáze pomocí konfiguračního souboru, kde je zapotřebí pouze vložit příslušný ovladač. Většina ORM systémů obsahuje tyto ovladače při instalaci, tudíž je potřeba pouze výměna názvu.

Optimalizace dotazů a výkonu

Většina ORM dokáže, bez nutnosti konfigurace, automaticky optimalizovat dotazy vedené na databázi. Příkladem mohou být spojované tabulky, které mají složité vazby typu M:N.

Systém automaticky vybere pouze potřebné tabulky a sloupce, které jsou uvedené v objektovém zápisu, bez nutnosti konkrétní specifikace v kódu. (KOURAKLIS, 2019) Srovnání zápisu TypeORM a SQL:

SELECT * FROM Projects INNER JOIN Employees ON product_ownerID = Employees.id projectRepository.findAll({ relations: [‘employees‘] })

Využití v prototypu

ORM je v prototypu použit jako hlavní nástroj pro práci s databází a zároveň jako vhodná kombinace při použití GraphQL. Jako knihovna třetí strany je zvolena TypeORM. Tato knihovna je velmi dobře kombinovatelná s knihovnou pro technologii GraphQL – TypeGraphQL. Obě knihovny využívají dekorátory a třídy objektově orientovaného stylu Javascriptu a jsou na míru řešené při použití nadstavby Typescript. To znamená, že dokážou automaticky rozpoznat, jaké typy atributů databáze používá a vytvářet pro ně typové definice.

2.2.6 HTTP a REST API

V dnešní době je běžné používat webové služby, které poskytují specifickou funkcionalitu nebo data k dalšímu využití. Jedním z návrhů, jak takové služby tvořit je REST. Jedná se o architektonický návrhový vzor, který umožňuje konzistentní a udržovatelnou strukturu přístupových bodů k datům. Jedním z příkladů mohou být služby poskytující předpověď počasí, které vývojáři mohou využít ve svých aplikacích k zobrazení příslušných dat. Dalším typickým příkladem je mikroservisní architektura, kde jednotlivé uzly spolu komunikují pomocí REST API.

Návrh URI adres

Zdrojové adresy se skládají z několika prvků, které umožňují definovat přesný ukazatel požadovaných dat. Jako první je definováno přenosové schéma, což mohou být například protokoly http, https nebo ftp. Další částí je doména požadovaného serveru. Třetí součástí může být cesta ke zdroji na doménovém serveru. Poslední možností je specifikace dotazovaného zdroje, například konkrétní objekt v databázi. Výsledný formát vypadá následovně:

schéma://doména.cz/cesta?dotaz#fragment

Interakce s http protokolem

Pro komunikaci s webovou službou v prostředí REST se používají stavové kódy, které představují stav událostí, které proběhnou během dotazu a odpovědi od serveru. Stavové kódy jsou reprezentovány číslem v rozmezí 200–599. Pokud je provedená operace úspěšná je zapotřebí použít kód v rozmezí 200–299. Stavové kódy 400-599 představují chybu v operaci. To znamená, že klient může zareagovat a zobrazit například chybovou hlášku.

Metadata

Při přenosu lze využít takzvaná metadata v hlavičkách jednotlivých požadavků a odpovědí.

Tato metadata pomáhají s přenosem informací o typu dat, délce jejich životnosti nebo autorizaci zdroje. Nejpoužívanějším typem hlavičky je „Content-Type“, neboli typ obsahu požadavku. V dnešní době se nejčastěji používá typ „JSON“. Další hlavičkou, která je využita i v prototypu je „Authorization“, která se používá zejména pro přenos autorizačních tokenů.

(MASSÉ, 2012)

Využití v prototypu

Ve vyvíjeném prototypu se používá interní webová služba, která využívá návrhový vzor REST. Tato služba dodává informace o zaměstnancích a projektech. Služba je využita pro propojení a konzistenci informací v rámci společnosti, což v kombinaci s daty uloženými v prototypu dává kompletní údaje. Aplikace využívá data z interního systému, která následně uloží do svého cachovacího nástroje s živostností jedné hodiny. Jelikož data ze systému nejsou často měněná, není potřeba cache aktualizovat častěji.

2.2.7 Docker

Vývoj s pomocí izolovaných kontejnerů je v dnešní době velmi populární volbou. Docker je jeden z nejpoužívanějších nástrojů pro vývoj škálovatelných a udržovatelných aplikací. Jeho hlavní předností je izolace projektu a jeho závislostí do takzvaného kontejneru, který lze použít jako celek na jakémkoliv prostředí. To znamená, že vývojář nemusí mít dostupné všechny závislosti na svém lokálním prostředí, ale může využít Docker, který nainstaluje potřebné věci do virtuálního prostředí. Docker se nejčastěji používá na prostředí třetích stran, které se zabývají zprostředkováním sestavení a distribucí aplikací a dalších systémů či nástrojů. Příkladem mohou být Amazon Web Services nebo Microsoft Azure.

Pro vývojáře

Běžným problém dnešní doby je množství prostředí, které vyvíjené aplikace potřebují k finální distribuci na produkční prostředí. Aby vývojáři mohli testovat jejich kód na stejném prostředí jako jsou všechna ostatní, je zapotřebí sjednotit veškeré závislosti projektu do jednoho kontejneru, který mohou využívat pro vývoj a zároveň se nemusí obávat jiných podmínek na ostatních prostředích, jako mohou být například testovací, před-produkční prostředí atp.

Pro operátory – DevOps

Správa mnoha prostředí je každodenním chlebem mnoha operátorů DevOps. Pro zachování stejných podmínek na všech prostředích se využívá nejen Docker, ale i další kontejnerové nástroje, jako je například Kubernetes, který umožňuje orchestraci aplikačních serverů.

Docker je v dnešní době pro operátory nezbytným nástrojem pro rychlou a snadnou aplikaci vyvíjeného systému na různá prostředí a jejich správu. Výhodou Dockeru je i jeho vysoká parametrizace, což umožňuje zadávat různé podmínky pro specifická prostředí. Příkladem mohou být adresy serverů a jejich interní konfigurace.

Pro podniky

Poměrně častým problémem společností, které využívají složitější architekturu a propojení svých jednotlivých aplikací, je budoucí škálovatelnost ve smyslu přidávání nových modulů a dalších systémů mezi stávající prvky. V tomto případě je problém kompatibilita systémů a jejich verze závislostí. Docker dokáže automaticky vyhledat a správně propojit závislosti jednotlivých aplikací a zároveň je možné vytvořit kopie stávajících kontejnerů s jinými parametry. Vytváření kopií kontejnerů může pomoci i při A/B testování, kdy na jednom prostředí běží aplikace s verzí A, a na druhém verze B. (McKENDRICK, a další, 2017)

Využití v prototypu

V prototypu se Docker využívá na přípravu prostředí databáze, kdy v kontejneru běží server MySQL pro rychlé a pohodlné vytvoření prostředí se stejnými podmínkami napříč všemi vývojáři a distribučními servery. V budoucnu se rozšíří kontejner o aplikační server a klientskou stranu systému.