• Nebyly nalezeny žádné výsledky

3.6 Shrnutí dosažených kritérií

3.6.3 Shrnutí a zhodnocení

Závěrečná podkapitola se věnuje shrnutí všech požadavků v zadání a jejich dosažení v této práci. Následující tabulka obsahuje jednotlivé cíle a jejich popis, včetně označení, zda byl splněn. Zeleně vyznačené položky značí zásadní přidanou hodnotu do nového prototypu oproti současnému stavu. Černé označují části, které jsou podobné současné verzi aplikace.

Oranžové požadavky byly splněny z pouze části.

Tabulka 11: Shrnutí dosažení cílů a požadavků zadání prototypu Cíl/Požadavek Popis dosažení Splněno

Implementace technologie Typescript

Typescript slouží jako hlavní

programovací jazyk prototypu. Ano

Implementace technologie

Ano, v budoucnu je potřeba doplnit jednotlivé akce.

Cachovací nástroje Vylepšení cachování s

ohledem na rychlost odezvy Ano

Přidání modulu Zaměstnanci Manipulace CRUD a propojení s externí službou. Ano

Přidání modulu Projekty Manipulace CRUD a propojení s externí službou. Ano Přidání modulu Technologie Manipulace CRUD. Ano Přidání modulu Klienti Manipulace CRUD. Ano

Přidání modulu Kurzy

Timur Services i server LDAP jsou propojeny s aplikací

Z části. Je zapotřebí zahrnout do kontejneru i aplikační server Node.js.

Práce naplnila všechny potřebné cíle v rámci zvolených technologií a postupů. Budoucí vývoj přinese do aplikace další moduly pro správu a mnoho funkcionality pro koncové uživatele. Cílem prototypu bylo systém připravit na tyto změny a postavit kvalitní jádro, které bude snadné udržovat a rozšiřovat.

Závěr

Hlavním cílem práce bylo vytvoření prototypu aplikace Hakkastack, která propojuje projekty, technologie a zaměstnance do jednoho systému v technologii GraphQL. Tento prototyp bude dále sloužit jako podklad pro další vývoj aplikace ve společnosti. Tento cíl byl složen z několika dílčích cílů, které vedly k jeho splnění.

Prvním dílčím cílem bylo využití agilní metodiky Scrum pro vývoj tohoto prototypu a k celkovému vedení práce. Součástí bylo i využití bezplatného nástroje Trello pro správu metodiky a uložení artefaktů. Popis této metodiky a její základní využití nástroje je uvedeno v kapitole 2.1. Konkrétní praktická implementace metodiky, včetně rozpisu jednotlivých požadavků a přesná konfigurace, je popsána v kapitole 3.4. Možností dynamického nastavení této metodiky a jejího použití v této práci byl cíl splněn.

Druhým dílčím cílem bylo popsat jednotlivé použité technologie, ve kterých je prototyp implementován. Jednotlivé technologie jsou obsaženy v kapitole 2.2, včetně konkrétního využití v prototypu, což napomáhá orientaci ve vývoji řešení. Zahrnutím technologií do teoretické části a jejím následným využitím v prototypu byl dílčí cíl dosažen.

Třetím dílčím cílem byl podrobnější popis technologie GraphQL, včetně jejích výhod a nevýhod. Tento cíl je zahrnut v kapitole 2.3, která se věnuje kompletnímu popisu této technologie, ukázkami kódu a dalším informacím, které souvisí s touto technologií. Cíl byl splněn v rámci detailního popisu a zejména využitím GraphQL v prototypu.

Čtvrtý dílčí cíl byla samotná implementace základního jádra systému pomocí programovacího jazyka Typescript v prostředí Node.js a hlavní komunikační technologie GraphQL. Celková implementace začíná v kapitole 3.5, kde se nachází vytvoření aplikačního serveru v podkapitole 3.5.3. Tento cíl byl splněn v rámci uvedených kapitol.

Pátým dílčím cílem bylo propojit aplikaci s firemními službami, které poskytují další údaje o zaměstnancích a projektech. Zároveň i připojit autorizační server LDAP pro zachování přihlašovacích údajů zaměstnanců. Tyto služby byly nejprve popsány v kapitole 3.3.2 a následně implementovány v rámci kapitol 3.5.7 a 3.5.8. Cíl byl tímto splněn.

Šestým dílčím cílem bylo implementovat základní moduly této aplikace, které spojují zaměstnance, technologie, projekty, klienty a kurzy. Jednotlivé moduly byly naimplementovány v kapitolách 3.5.9 až 3.5.13. Všechny moduly obsahují operace CRUD s výjimkou modulu kurzů, který obsahuje navíc přihlašování a odhlašování kurzu. Přidáním všech základních modulů byl cíl splněn.

Sedmým dílčím cílem bylo vytvoření rolí v systému se snadnou manipulací a škálovatelností do budoucna. Vytvoření rolí proběhlo v rámci kapitoly 3.5, kdy jejich konkrétní popis a nastavení bylo uvedeno v podkapitole 3.6.2. Tento dílčí cíl má významný přínos do aplikace, která v současném stavu běží pouze s dvěma rolemi. Implementací škálovatelného systému rolí byl cíl splněn.

Osmým dílčím cílem byla konfigurace pravidel pro psaní kódu z důvodu udržitelnosti čisté a kvalitní kódové báze za častého střídání vývojářů aplikace. Součástí tohoto cíle bylo i vylepšení cachovacích nástrojů pro zvýšení rychlosti odezvy systému. Prototyp obsahuje cachovací nástroje pro propojené služby i složité databázové dotazy. Tento dílčí cíl byl splněn v rámci implementace v kapitole 3.5.14.

Posledním dílčím cílem práce bylo srovnání rychlosti odezvy se současnou verzí aplikace pro ověření rozdílu hodnot mezi zvolenými technologiemi a celkovou implementací.

Z výsledků bylo patrné, že technologie GraphQL a cachovací nástroje podstatně navýšily výkon aplikace. Porovnání je uvedeno v kapitole 3.6.1. Zvýšením rychlosti odezvy byl cíl splněn.

Splněním všech výše uvedených dílčích cílů byl hlavní cíl implementace prototypu splněn.

Společnost má možnost definice nových rolí pro systém, včetně možné přestavby některých zavedených atributů pro jednotlivé moduly. Budoucí vývoj aplikace je chráněn nastavenými pravidly pro vývoj, které jsou automaticky kontrolovány při sestavení aplikace. Značné zvýšení rychlosti odezvy aplikace pomocí technologie GraphQL přináší zásadní změnu pro budoucí vývoj a práci s touto aplikací.

Budoucí vývoj

Závěrem této práce je i definice směru budoucího vývoje nové verze aplikace Hakkastack.

Jako další část vývoje bude následovat korekce atributů základních modulů pro nastavení nových podmínek a relací, které jsou potřeba pro další funkcionalitu.

Jelikož současná verze aplikace obsahuje zhruba deset dalších modulů, jako jsou například tvorba životopisů, zasedací pořádek, služební cesty, rezervace knih atd. je nutné projít jednotlivé implementace současné verze a převést je do nového prototypu. Důležité je zamyslet se nad novou technologií GraphQL, která umožňuje snížit duplikace některých funkcionalit.

Další bude definice jednotlivých akcí a rolí, které budou v systému potřeba. Každá metoda serveru GraphQL může obsahovat výčet akcí, které musí přistupující role obsahovat pro její vykonání. Systém umí zpracovávat neomezený počet rolí, avšak je vhodné definovat maximálně deset rolí pro snadnou orientaci zaměstnanců i vývojářů.

Posledním krokem bude začištění všech modulů, testování celé aplikace a napojení automatizovaného nasazení aplikace na produkci, které bude z velké části přepoužité ze současné verze.

Použitá literatura

APKE, Larry. 2015. Understanding the Agile Manifesto. Morrisville : Lulu Publishing, 2015. ISBN 978-1-312-86391-0.

APOLLO. 2020. The Apollo Data Graph Platform. [Online] 2020. [Citace: 29. 10. 2020.]

Dostupné z: https://www.apollographql.com/.

BIEHL, Matthias. 2018. GraphQL API Design. Rotkreuz : API-University Press, 2018.

ISBN 978-1979717526.

COLOMO-PALCIOS, Ricardo, a další. 2014. Agile Estimation Techniques and Innovative Approaches to Software Process Improvement. Hershey : IGI Global, 2014.

ISBN 978-1-4666-5183-8.

DONAHOO, Michael J. a SPEEGLE, Gregory D. 2013. SQL: Practical Guide for Developers. San Francisco : Elsevier, 2013. ISBN 978-0-1222-0531-6.

FACEBOOK. 2020. About Facebook. [Online] 2020. [Citace: 18. 10. 2020.] Dostupné z:

https://www.facebook.com/facebook.

FENTON, Steve. 2018. Pro TypeScript: Application-Scale Javascript Development.

Basingstoke : Apress, 2018. ISBN 978-1-4842-3248-4.

GITHUB. 2020. Github is people build software. [Online] 2020. [Citace: 18. 10. 2020.]

Dostupné z: https://github.com/about.

GOODMAN, Danny. 2007. JavaScript Bible. 6. Indianapolis : Wiley Publishing, Inc., 2007. ISBN 978-0-470-06916-5.

GRAPHQL. 2020. Introduction to GraphQL. [Online] 2020. [Citace: 27. 10. 2020.]

Dostupné z: https://graphql.org/learn/.

HERRON, David. 2018. Node.js Web Development: Server-side development with Node 10 made easy. 4. Birmingham : Packt Publishing, 2018. ISBN 978-1-78862-685-9.

JWT. 2020. Introduction to JSON Web Tokens. [Online] 2020. [Citace: 4. 11. 2020.]

Dostupné z: https://jwt.io/introduction/.

KNIBERG, Henrik. 2015. Scrum and XP from the Trenches. Spojené státy americké : C4Media, 2015. ISBN 978-1-392-22427-8.

KOURAKLIS, John. 2019. Introducing Delphi ORM: Object Relational Mapping Using TMS Aurelius. London : Apress Media, LLC, 2019. ISBN 978-1-4842-5013-6.

MASSÉ, Mark. 2012. REST API Design Rulebook. Sebastopol : O'Reilly Media, Inc., 2012. ISBN 978-1-449-31050-9.

McKENDRICK, Russ a GALLAGHER, Scott. 2017. Mastering Docker. Birmingham : Packt Publishing Ltd., 2017. ISBN 978-1-78728-024-3.

NPM. 2020. Build amazing things. [Online] 2020. [Citace: 2. 11. 2020.] Dostupné z:

https://www.npmjs.com/.

PODLIPSKÝ, Šimon. 2018. Porovnání implementací REST a GraphQL API. [Online]

2018. [Citace: 17. 9. 2020.] Dostupné z: https://theses.cz/id/1f9aca/.

SCRUM.ORG. 2020. What is Scrum? [Online] 2020. [Citace: 26. 10. 2020.] Dostupné z:

https://www.scrum.org/.

SHORE, James. 2008. The Art of Agile Development. Sebastopol : O'Reilly Media, Inc., 2008. ISBN 978-0-596-52767-9.

SCHWABER, Ken. 2004. Agile Project Management with Scrum. Spojené státy americké : Microsoft Press, 2004. ISBN 9780735637900.

TRELLO. 2020. About Trello. [Online] 2020. [Citace: 12. 9. 2020.] Dostupné z:

https://trello.com/.

TWITTER. 2020. About Twitter. [Online] 2020. [Citace: 18. 10. 2020.] Dostupné z:

https://about.twitter.com/.

TYPEGRAPHQL. 2020. Modern framework for GraphQL API in Node.js. [Online]

2020. [Citace: 1. 11. 2020.] Dostupné z: https://typegraphql.com/.

TYPEORM. 2020. ORM that can run in Node.js. [Online] 2020. [Citace: 1. 11. 2020.]

Dostupné z: https://typeorm.io/#/.

WIERUCH, Robin. 2018. The Road to GraphQL. Germany : Robin Wieruch, 2018. ISBN 978-1730853937.

ZICHA, Ondřej. 2018. Modelové řešení aplikace klient-server využívající GraphQL.

[Online] 2018. [Citace: 18. 09. 2020.] Dostupné z: https://theses.cz/id/3h902y/.

Přílohy

Příloha A: Konfigurace formátovacích a lintovacích pravidel

Prettier

{

"singleQuote": true, "trailingComma": "all", "printWidth": 80,

"arrowParens": "avoid"

}

Eslint

{

"parser": "@typescript-eslint/parser", "extends": [

"eslint:recommended",

"plugin:@typescript-eslint/eslint-recommended", "plugin:@typescript-eslint/recommended",

"prettier",

"prettier/@typescript-eslint"

],

"plugins": ["@typescript-eslint"], "rules": {

"@typescript-eslint/consistent-type-definitions": ["warn", "type"], "@typescript-eslint/explicit-function-return-type": "off",

"@typescript-eslint/explicit-member-accessibility": "off", "@typescript-eslint/explicit-module-boundary-types": "off", "@typescript-eslint/no-angle-bracket-type-assertion": "off", "@typescript-eslint/no-non-null-assertion": "off",

"@typescript-eslint/no-unused-vars": [ "warn",

{

"argsIgnorePattern": "^_", "ignoreRestSiblings": true }

],

"@typescript-eslint/no-use-before-define": [ "warn",

{

"functions": false, "classes": false,

"variables": true }

],

"no-case-declarations": "warn", "no-console": "warn",

"no-debugger": "warn", "no-else-return": "warn", "no-param-reassign": "warn", "no-undef": "off",

"no-unused-vars": "off", "no-var": "warn",

"object-shorthand": "warn",

"padding-line-between-statements": [ "warn",

{

"blankLine": "always", "prev": "*",

"next": "while"

}, {

"blankLine": "always", "prev": "block-like", "next": ["let", "const"]

} ],

"prefer-const": "warn", "yoda": "warn"

} }

EditorConfig root = true

[*]

charset = utf-8 end_of_line = lf indent_size = 2 indent_style = space

insert_final_newline = true

[*.md]

trim_trailing_whitespace = false

Příloha B: Struktura dotazu při testování rychlosti odezvy

Výpis zaměstnanců včetně spojených entit

query Employees { employees { id

role login aboutMe subscription active

createdAt updatedAt

data {

Výpis zaměstnanců bez dalších entit

query Employees {

Přihlášení

query Login($username: String!, $password: String!) { login(username: $username, password: $password) { token

isNew }

}