Od špagety k objektům (4) - Framework
Výběr a použití kvalitního vývojového frameworku ovlivňuje kvalitu kódu a má tak významný vliv na celkovou rychlost aplikace. Tento článek shrnuje význam použití frameworku pro tvorbu aplikací a důležitá kritéria pro výběr.
1. Co je framework
Při prozkoumání zdrojového kódu většiny aplikací lze zjistit, že téměř vždy řeší stejné problémy. A proto si dříve či později každý programátor vytvoří svoji sadu funkcí nebo tříd, které tyto problémy řeší a ulehčí mu tak práci na dalších projektech. Takovéto menší či větší sady kódů se vznešeně nazývají „framework“ a stávají se nedílnou součástí všech dalších projektů programátora. Na některých frameworcích již od samého začátku stály týmy expertů, u jiných stál „jen“ motivovaný jednotlivec. Naštěstí se našli tací, kteří se o svoji práci podělili a posunuli tak celé generace vývojářů o krok dál tím, že své frameworky zveřejnili.
2. Proč použít framework
Použití již hotového frameworku přináší hned několik výhod. První a asi největší výhodou je, že při vytváření nového projektu již není třeba „znovu objevovat kolo“ v podobě řešení již dávno zodpovězených otázek. Navíc lze očekávat, že řešení používané delší dobu na více projektech již bude vyzkoušené, odladěné a dost možná i efektivní. V komunitě vývojářů PHP se sice nachází poměrně velká část lidí, kteří si myslí, že je jejich řešení lepší, ale lze jej vůbec srovnávat s prací vysokoškolsky vzdělaných expertů, kteří stáli u zrodu mnoha těchto frameworků, nebo s prací teamu programátorů a jejich mnohaletou praxí, nebo s prací komunity lidí, kteří vyzkoušeli všechny možné způsoby nasazení a použití jednotlivých komponent?
Další výhodou nasazení hotového frameworku je jistý standard, jakým jsou aplikace na něm vytvořeny. Každý další programátor znalý této technologie tak přesně ví, kam se má podívat a kde případně hledat problém. Díky tomu se významně zkracuje čas na adaptaci nového člena teamu. Zároveň se tím zvyšuje počet lidí schopných a tedy i ochotných podat pomocnou ruku na různých diskusních fórech při hledání příčiny nějakého problému.
3. Jaký framework vybrat
Ačkoliv se z předchozího textu může zdát výhodné použití frameworku, nastává veliký problém s jeho výběrem. Pokud se použije správný framework, bude postupně rozvíjet programátorovi znalosti a bude mu nápomocný v mnoha nesnadných situacích. Bude-li však z kategorie nesprávných, bude mít jeho nasazení fatální dopad na celkový projekt. Následující odstavce se snaží shrnout otázky a jejich pozadí, které by měl mít framework vyřešené, nebo je alespoň řešit.
3.2 Modularita a náročnost na výkon
Dalším z důležitých faktorů pro výběr frameworku je jeho modularita a náročnost na běh. Dříve existovaly frameworky, které řešily mnoho z výše popsaných problémů, ale jejich kód nebyl dostatečně modulární a optimalizovaný pro výkon. Aplikace postavené na těchto frameworcích sice vznikaly dle očekávání rychle, ale jejich kód obsahoval mnoho zbytečných částí, které se při každém požadavku načetly do paměti a přesto nikdy nepoužily. To mělo za příčinu vysokou paměťovou náročnost a velkou časovou prodlevu mezi požadavky na aplikaci. Z legrace se tyto aplikace nazývají managerským termínem „enterprise řešení“.
3.3 Rozšiřitelnost a akademická čistota
Při řešení komplikovanějších problémů bývá programátor postaven před nutnost rozšíření frameworku. Jeho kód by proto měl být srozumitelný, rozumně navržený i pro potřeby dalšího rozšíření a v ideálním případě i dostatečně zdokumentovaný. Když programátor prochází zdrojový kód frameworku a seznamuje se s jeho vnitřními pochody, zároveň tak čerpá znalosti a postupy pro řešení dílčích obvyklých situací. Je-li framework tvořen soustavou workaroundů, dočasných řešení a zjednodušení narušujících základní pravidla pro kvalitní vývoj, jistě se to odrazí i na výsledné kvalitě budoucí práce programátora.
3.4 Bezpečnost
Další a jistě podstatnou otázkou při výběru je důraz kladený na celkovou bezpečnost respektive zranitelnost frameworku. Paradoxně mnoho nejznámnějších frameworků jsou známé mimo jiné i pro jejich zranitelnost. V každém trochu větším kódu se vždy najde drobná chybka, která se po čase opraví, ale nemělo by jít o chybu v celkovém návrhu, jelikož oprava takové chyby znamená novou a ve většině případů nekompatibilní verzi. Tedy oprava takové chyby znamená použití de fakto jiného frameworku a proč tedy nevybrat správně hned na začátku.
4. Aktuálnost a moderní trendy
Jedním z důležitých faktorů při výběru by také měla být aktivita vývoje frameworku a sledování moderních trendů. Stávající moderní aplikace stojí před moderními problémy a správný framework by tu měl být jako pomocná ruka. Někteří programátoři raději zvolí jiný programovací jazyk, který se halasně chlubí řešením právě probírané otázky a přitom ve většině případů existuje řešení i ve stávajím programovacím jazyce.
Před nedávnem byla komunita vývoje v jazyce PHP svědkem mohutného přechodu k platformě Ruby a jejímu frameworku RoR mimo jiné proto, že obsahoval „balíčkovací systém“. Díky takovému systému lze pohodlněji řešit verzování hotového kódu a následný deployment. Zároveň jej lze využít pro pohodlné sestavení takzvaného „sandboxu“, neboli základního zdrojového kódu a základní sady knihoven použitých jako základ nového projektu. Za tímto účelem existuje pro jazyk PHP open-source balíčkovací systém Composer.
V době psaní tohoto článku se děje velice podobné přecházení k platformě NodeJs která slibuje řešení problematiky multitaskingu, neboli současného zpracování více požadavků. Oproti v PHP platformě standardnímu přístupu „Request / Response“, kde se na začátku požadavku načte vše potřebné pro obsloužení požadavku a po odeslání odpovědi se vše zahodí, se v „multitasking” platformě kód načte jen jednou při spuštění a pak už odpovídá na jednotlivé požadavky. Je zřejmé, že tento přístup je zajímavý pro zpracování velkého množství požadavků v krátkém čase. Najde si tak uplatnění v různých opravdu vytížených API nebo jako server spouštějící mnoho simultálně běžících skriptů například pro parsování a získávání dat. Platforma NodeJs k tomu využívá vlastnosti takzvaného „Unobstructive javascript“, což není de facto nic jiného než využití callbacků, closure a lambda funkcí, které jsou dostupné i v platformě PHP. Tedy se nejedná o „Unobstructive javascript“, ale spíš o „Unobstructive development“, tedy schopnost kódu zpracovávat více požadavků zároveň, aniž by se vzájemně ovlivňovaly. Odpovědí na platformu NodeJs je php knihovna ReactPHP, která slouží přesně k tomuto účelu.
Problematika těchto moderních trendů s sebou přináší i nový fenomén. Ve snaze nepřipuštění si vlastní chyby někteří odsoudí stávající řešení, všechno zahodí a raději přejdou na novou platformu, která se chlubí větším množstvím takzvaných „buzzword“ a slibuje řešit jejich problém. Neuvažují přitom, že jsou společnosti, které využívají stávající technologii při výrazně větší zátěži bez žádného většího problému a při tom čelí stejné otázce. V některých případech tak namísto vlastního rozvoje raději použijí instantní znalost v podobě přechodu na novou platformu a zůstanou tak v této otázce nevzděláni. Může to však mít fatální dopad, protože tito lidé mohou zastávat vysoko postavené role a ovlivňovat tak chod celé společnosti.
5. Závěr
Rozhodnout se pro správný framework opravdu není jednoduché. Jistou pomoc v této otázce nabízí seriál článků Velký test PHP frameworků na serveru root.cz, ačkoliv jeho aktuálnost je dnes na pováženou. Mezi opravdu velice zajímavé frameworky však bezesporu patří Nette Framework, který využívá stále se rozrůstající počet velkých společností v české republice i mimo ni.