1.2
Zásady tvorby webových aplikací
Povíme si, jakými způsoby se webové aplikace tvoří a na co je dobré myslet při jejich tvorbě, aby dobře fungovaly. Realizace takové aplikace je projekt. Někdy může být menší, jindy zase větší, ale vždy bychom měli myslet na to, že se jedná o projekt a měli bychom brát v úvahu všechny jeho aspekty. Každý projekt má čtyři základní fáze: specifikace, implementace, validace a evoluce.
1.2.1
Specifikace
Výsledkem specifikace musí být jasné zadání pro grafiky, kodéry a programátory. Přechází se od ideje, která je obvykle vágní, ke konkrétním popisům designu a funkcí nové aplikace. Řeší se zde i studie proveditelnosti, ve které se musí řádně zhodnotit, je-li možné projekt realizovat. Překážkami realizace mohou být nedostatečné zkušenosti, nedostatečná znalost technologií, nedostatek lidských zdrojů, času, finančních prostředků, ale třeba i nedostatečně provedená specifikace. I to není stále vše. Pokud se již rozhodneme aplikaci vytvořit, je nutné si na začátku vždy umět odpovědět na několik základních otázek:
  1. Jaký je cíl webové aplikace?
  1. Jaké jsou cílové skupiny?
  1. Jakým způsobem webovou aplikaci vytvořit?
  1. Kde provozovat?
  1. Kdo bude webovou aplikaci spravovat?
  1. Kdo a jak často bude aktualizovat (systém i obsah)?
  1. Kolik to bude stát?
  1. Jaký je termín spuštění?
Pojďme si přiblížit oněch osm výše uvedených otázek, i když bychom si jistě mohli položit mnoho dalších. Znát dobře cíl aplikace je klíčové. Uvědomme si, že aplikace se nevytváří jedním způsobem a podle toho jaký mají obsah, pak plní patřičnou funkci. Už od začátku by se měla aplikace navrhovat podle toho, bude-li něco prodávat, nebo fungovat jako virtuální galerie. Rozdíl pak nebude jen v prvcích na webové stránce, uspořádání menu, designu vůbec, ale i v technologiích, které obsah připravují. Znát cílovou skupinu je také velmi důležité. Tvoříme obsah pro lidi nebo boty. Lidé chtějí „user friendly” prostředí, kde zohledňujeme i lidskou psychologii, botům záleží zejména na validním kódu. Cílová skupina pak ovlivňuje i lokalizace obsahu, způsob podání obsahu, odbornost textů a mnohé další.
Další otázkou je, jak se webové aplikace vůbec tvoří? Zde jsou tři základní způsoby, které se mohou různě prolínat. Prvním je psát aplikaci „z čisté louky“. To znamená si veškeré zdrojové kódy psát sami. Dalším způsobem je používat různá hotová řešení pro dílčí části. To mohou být různé frameworky, knihovny, redakční systémy, ale i fonty, ikonky, obrázky, zvuky a podobně. Třetím způsobem je využít hotové kompletní řešení jako službu (Google, Facebook, Booking…). Zde nesmíme zapomenout na otázky, zda je možné hotová řešení upravovat a rozšiřovat o nové funkce. Zda jsou hotová řešení svými programátory dále vyvíjena a udržována. Zda je možné tato řešení legálně použít, tedy jsou-li vydávána pod požadovanými licencemi.
Je také důležité, kde a jak budeme webovou aplikaci z technického pohledu provozovat. Opět máme několik možností:
  1. Dedikovaný server (Pronajatý fyzický server, kde se poskytovatel stará o HW. Zákazník si řeší kompletně SW.)
  1. Managed server (Pronajatý fyzický server, kde se poskytovatel stará o HW i SW. Zákazník má jen přístupy na FTP a do databáze.)
  1. Server housing (Poskytovatel nabízí jen prostor pro server, konektivitu k datové síti, napájení a chlazení. Server a jeho kompletní správu řeší zákazník.)
  1. Virtuální server (Zákazník si pronajímá jen části serveru s virtualizací, kde má obvykle vlastní kopie operačního systému a nainstalované aplikace. Poskytovatel se stará o server a chod virtualizace.)
  1. Běžný hosting (Zákazník neřeší správu serveru, má jen přístupy k FTP, na email, do databáze a do administrace svého účtu. Poskytovatel se stará o HW i SW na serverech. Na jednom serveru může být i několik stovek nebo tisíců zákazníků.)
  1. Vlastní webserver (Zákazník si řeší vlastní server, prostory, chlazení, konektivitu, elektřinu a kompletní software.)
Na každém tomto řešení musíme řešit mnoho dalších záležitostí. Naše výsledná aplikace bude potřebovat patřičný prostor, programový interpret, napojení na databázi a také i konkrétní HTTP server. Nejčastěji se setkáváme s kombinací LAMP (Linux Apache MySQL PHP), WAMP (Windows Apache MySQL PHP) nebo MAMP (Mac Apache MySQL PHP). U Windows řešení najdeme kombinace Windows + IIS + ASP.NET + MS SQL Server. Častou alternativou nebo i souběžným SŘBD k MySQL je nyní i MariaDB, která z MySQL vznikla po koupení MySQL společností Oracle Corporation. Mnohdy nás zajímají i verze jednotlivých aplikací či technologií, protože naší programované aplikaci mohou od určitých verzí něco přinášet.
Kromě hostingu nesmíme zapomenout i na doménu. Volba vhodné domény je velmi důležitá. Měla by být jasná, jednoduchá, krátká a výstižná. Cena domény se pohybuje řádově ve stokorunách ročně, což je v rámci projektu zanedbatelná částka.
Pokud vytvoříme například internetový obchod, musí být jasné, kdo bude aktualizovat jeho obsah. Kdo bude plnit obchod produkty. Bude-li to automatický systém synchronizace z nějakého externího feedu dodavatele, nebo bude-li to dělat nějaký zaměstnanec obchodu ručně, nebo kombinace obou přístupů.
Poslední dvě z oněch osmi základních otázek není již třeba více rozvíjet. Řekněme si jen základní projektové poučky. U řízení projektu existuje tzv. projektový trojimperativ (Triple Constraint nebo the Iron Triangle). Jde o pomyslný trojúhelník, kde na jeho vrcholech je funkce, cena a termín. Tyto tři prvky se velmi vzájemně ovlivňují. Například pokud zkrátíme termín, tak se to jistě negativně projeví na ceně nebo funkcích, nebo obojím. Podobně pokud přidáme nové funkce, odrazí se to negativně na čase nebo ceně, nebo opět obojím. Analogicky se podobná negativa dějí u zkrácení ceny. Na tyto závislosti nesmíme zapomenout. Je dobré si jeden z těchto parametrů projektu vzít jako stěžejní a zbylé dva k němu poté přizpůsobovat. Vše, zejména pak termíny, by mělo být realistické.
1.2.2
Implementace
Ve fázi implementace již tvoříme aplikaci dle zadání. Hledáme řešení konkrétních dílčích problémů. Zapisujeme algoritmy v programovacích jazycích. Provádíme testování napsaných částí aplikace.
Každý programátor má své oblíbené vývojové prostředí, které známe pod zkratkou IDE (Integrated Development Environment). Můžeme uvést například NetBeans, Eclipse, KDevelop, Microsoft Visual Studio nebo i jednoduchý, ale velmi užitečný PSPad. Tato prostředí krom zvýraznění částí zdrojového kódu nabízí mnoho dalších užitečných funkcí – například správu projektu, doplňování kódu, dokumentace kódu, ladění, napojení na repositář… Já začínal s psaním webů v aplikaci PSPad a NetBeans. Je velmi sympatické, že obě IDE jsou zdarma a stojí za nimi čeští vývojáři.
Je dobré při psaní kódu myslet na jeho udržitelnost, spolehlivost, účinnost a použitelnost. Programátoři často opomíjejí srozumitelnost a čitelnost samotného kódu. Pokud pak čte kód někdo jiný, nebo se k němu sám programátor po delší době vrací, je mnohdy obtížné zpětně zjistit, jak kód pracuje. Nyní si uvedeme několik dobrých praktik vhodný pro obecné programování:
  1. Pro názvy používejte stejné a zaběhlé způsoby a používejte je stejně v celém projektu. Například pro názvy konstant se obvykle používají velká písmena abecedy, a pokud je název víceslovný, tak se jako oddělovač používá podtržítko. Příkladem jsou pak konstanty „PI“ nebo „MATH_PI“. Pro proměnné a funkce se pak používají písmena malé abecedy. U víceslovných proměnných se používá tzv. velbloudí notace (anglicky Camel Case) nebo opět podtržítka. Příkladem názvu proměnných může být „databaze“, „rowCount“, „row_count“. U tříd je to podobné jako s proměnnými, jen se píše i první písmeno velké. Tento způsob zápisu je zaběhlý jako PascalCase. Příkladem je „FileController“. V názvech nepoužívejte diakritiku. Názvy se obvykle píší anglicky.
  1. Z názvů proměnných a funkcí by mělo být jasné, k čemu slouží. Například u proměnné „rowCount“ je jasné, k čemu slouží, oproti proměnné „rc“. Vyvarujte se i číslování proměnných. Jen těžko se budete orientovat v kódu s proměnnými „a1“, „a2“ a „a3“. Pro iterace v cyklech jsou běžné názvy proměnných „i“, „j“, „k“. Ve třídách jsou běžné tzv. gettery/settery, které získávají/nastavují obvykle privátní proměnné. U těchto metod se běžně používá prefix get/set. Příkladem jsou pak názvy metod „getActualRowCount“ nebo „setMaxRowCount“. Podobně se pak používají i jiné prefixy. Příkladem je název metody „isValidEmail“, „renderTable“ nebo „drawCircle“ u kterých je také hned jasné, k čemu slouží.
  1. Těla funkcí by neměla být dlouhá. Doporučení je maximálně 20–30 řádek kódu. Podobně by neměla ani těla tříd být delší než cca 1000 řádků.
  1. Nepoužívejte hluboká zanořování podmínek a cyklů.
  1. Udržujte kód jednoduchý. To označuje princip KISS (Keep it simple, Stupid!)
  1. Na začátku si koncepčně rozvrhněte strukturu kódu i adresářovou strukturu projektu.
  1. Následujte princip DRY (Don’t Repeat Yourself) označované i jako DIE (Duplication is Evil). Jakmile se opakují části zdrojového kódu, není to dobré, opakují se i chyby v nich. Pokud najdete chybu v jednom, musíte ji opravit i v druhém. Podobně je to i s rozšířením funkce a podobně. Kód je méně přehledný a delší.
  1. Dokumentujte kód. Zejména je dobré psát dokumentační komentáře pro třídy, metody a proměnné. IDE se vám odmění našeptáváním vaší dokumentace. Pokud se k nějaké třídě vrátíte, lépe poznáte její funkčnost. Z dobře dokumentované třídy lze vytvořit i API (Application Programming Interface).
1.2.3
Validace
Ve validační fázi kontrolujeme, zdali hotová webová aplikace nebo jen nějaká její iterace neobsahuje chyby a odpovídá zadání. Testovat by se mělo i souběžně s implementací. Testovat se mohou celé aplikace nebo i jen její dílčí části, nebo dokonce i jednotlivé třídy zvlášť (Unit testing). Testovat mohou interní pracovníci, najatí testeři nebo i samotní budoucí uživatelé. V případě, že testování proběhne v pořádku, dochází k předání webové aplikace nebo její patřičné iterace do produkčního prostředí.
1.2.4
Evoluce
Poslední fází je evoluce. Předáním aplikace její „život“ nekončí. Po předání je potřeba řešit mnoho dalších činností, které lze rozdělit do tří základních kategorií:
  1. Oprava chyb
  1. Tvorba nových funkcí
  1. Přizpůsobení se novým technologiím
Při tvorbě webu nesmíme fázi evoluce opomenout. Je potřeba zajistit servis webu i po jeho předání, abychom zajistili jeho dlouhodobý funkční a bezpečný chod a byli jsme připraveni i na případné požadavky zákazníka na rozšíření nebo úpravu funkcí.