Blog
Píšeme pre vás


Je vhodné si vytvoriť vlastný framework?
Upozornenie: článok obsahuje mnoho technických pojmov bez vysvetlení, je venovaný pokročilejším programátorom. Je to už nejaký čas čo som priniesol článok o tom, kedy je vhodné využiť framework oproti „one-click“ stránkam pomocou CMS ako je napríklad WordPress. Dnes sa chcem zamerať na rozdiel medzi frameworkom, ktorý si vytvorí programátor sám podľa seba a tými, ktoré vytvorila skupina programátorov pre iných programátorov.
Open-source MVC framework
Neraz mi bolo povedané, nech nerobím vlastný framework a radšej využijem nejaký existujúci. Po preskúmaní internetu bol mojim najväčším favoritom Nette framework. Nakoľko autor Dávid Grundl pochádza z Českej republiky, Nette má veľmi rozšírenú komunitu v češtine, kde vám vždy ochotne pomôžu s problémom, ak angličtina nepatrí k vašim silným stránkam. Čo ma najviac na Nette zaujalo je štruktúra adresárov. Hlavný adresár je nedostupný, resp. nachádza sa o priečinok vyššie ako je koreňový adresár, odkiaľ sa volá súbor index, a priečinok s prezentermi, knižnicami a funkciami sa nachádza vo vlastnom priečinku pod hlavným adresárom. Takto to znie asi komplikovane, ale je to veľmi múdre riešenie, keďže návštevník webu nikdy neodkazuje priamo na žiadny PHP súbor a teda bezpečnosť voči napadnutiu je oveľa lepšia. Na nasledujúcom obrázku je ukážka, ako vyzerá štruktúra priečinkov a kde čo nájdeme.
Čo ma veľmi prekvapilo na Nette bolo, že štruktúra prezenterov a pohľadov je takmer úplne rovnaká ako v mojom frameworku, takže môj skúšobný web v tomto systéme bol jednoduchý na tvorbu, keďže som už viac-menej vedel čo a ako. Avšak čo ma zamrzelo, bolo využitie rovnakých názvov prezenterov pre rôzne moduly. Pre príklad, na front-ende som mal prezenter Blog, ktorý zobrazoval články, kategórie, komentáre a podobne. V administrácii som chcel využiť iný prezenter, ktorý sa volal rovnako Blog, avšak tu by mal prístup len admin a upravoval by články. Keďže Nette nezaujíma rozloženie súborov, záleží len od namespaceu (pretože prečíta všetky súbory v priečinku /app/), tak boli pomenované dve triedy rovnako (BlogPresenter) a teda mi web vracal chyby. Osobne to neberiem ako chybu, len som chcel mať rovnaké URL na funkciu na fronte aj admine.
Moji kamaráti, ktorí študujú na vysokej škole, potrebujú občas pomoc s programovaním webových stránok a snažím sa im čo najviac pomôcť. V ich štúdiu využívajú Code Igniter, s ktorým som prišiel do kontaktu prvýkrát práve vďaka nim. Osobne preferujem skôr Nette kvôli svojmu jednoduchému šablónovaciemu systému Latte a ladičke Tracy. Code Igniter používa prezentery, ale volajú sa kontroléry (Controllers), rovnako ako v mojom frameworku. Nemá však zložitejšie členenie priečinkov, ako som ukázal v prípade Nette, a jeho hlavný adresár je aj koreňový. Čo sa týka rozloženia súborov, mal som výhradu voči kontrolérom, ktoré sa nachádzajú všetky v jednom priečinku a rovnako tak aj pohľady. Toto by bolo asi chaosálne v prípade väčšieho e-shopu, kde môžu byť týchto kontrolérov desiatky. Popravde som sa tomuto frameworku veľmi nevenoval a pravdepodobne je možné si ich triediť podľa seba. V oboch prípadoch open-sourceových frameworkov sa môžeme tešiť z online dokumentácie, návodu a komunity.
Vlastný framework
Každý to zrejme pozná, že keď si vytvorí niečo vlastné, zanechá to v ňom dobrý pocit. Tvorba vlastného frameworku k tomu určite patrí. Pri testovaní Nette a Code Igniter som porovnával rýchlosti načítania jednoduchej webovej stránky pri čítaní menu položiek a pár textov z rovnakej databázy. Vo všetkých prípadoch neboli použité žiadne CSS štýly ani skripty či obrázky, takže testovanie bolo štýlom kto z koho. Na moje počudovanie bol najrýchlejši môj framework. Síce sa jednalo o necelých desať stotín sekundy, no tento výsledok ma prekvapil. Totižto Nette a Code Igniter majú za sebou vývoj niekoľkých rokov a teda majú k dispozícii veľa funkcií, ktoré v mojom frameworku chýbajú a možno aj práve preto sa môj systém dokázal rýchlejšie načítať, keďže obsahoval menej kódu.
Ďalšou výhodou, ktorou môj framework disponuje je, že môžem kľudne zasiahnuť do vlastných knižníc a upraviť si tam čo potrebujem. Niežeby som to v iných nemohol, ale ak by mal byť jeden zo spomenutých frameworkov aktualizovaný pomocou composera, moje úpravy by sa stratili a musel by som dané funkcie dopísať znova. Nanešťastie však tento môj nie je možné aktualizovať composerom a teda web, ktorý vytvorím o napríklad tri mesiace neskôr už môže obsahovať iné funkcie a knižnice nebudú spätne kompatibilné so staršími webmi.
Tvorba vlastného frameworku trvá veľmi dlho a častokrát sa človek nechá inšpirovať open-sourceovými systémami. Napríklad v tomto mojom som použil šablónovací systém Latte, ktorý je podľa mňa najlepší aký mohol vzniknúť a nemusí byť použitý len v Nette. Ďalšou super vecou od pánov z Nette foundation, ktorá je tiež nezávislá od Nette, je ladička Tracy. Počas správnej funkčnosti webu zobrazuje jeho rýchlosť, poprípade vlastné dump z kódu, teda nie je potrebné robiť break v kóde pre kontrolu premenných. Ak sa vyskytne chyba v kóde, pekne znázorňuje volanie funkcie cez všetky súbory až kým nenastala chyba. Je však veľmi inteligentná - na produkcii pri vážnej chybe nezobrazí používateľom kus vášho kódu, namiesto toho tento report exportne do súboru a používateľovi zobrazí peknú chybovú hlášku, že na webe je chyba a nech skúsia navštíviť stránku znova neskôr. Cez FTP sa k tomuto súboru dá dostať z priečinka /log/. Nasledujúce obrázky ukazujú správanie sa v prípade chyby v testovacom a v produkčnom prostredí (snažím sa volať neexistujúcu premennú zobrazDatum v súbore DefaultController.php):
Zhodnotenie
Vlastný - Výhody
- Teoreticky môže byť rýchlejší
- Upraviteľnosť knižníc podľa „svojho gusta“
- Keď vytvorím vlastný systém, viem presne ako zareaguje na požiadavku a ako ju spracuje
Vlastný - Nevýhody
- Časovo náročný projekt, hlavne prvé weby
- Nové funkcie treba pridávať ručne
- Keď niečo nefunguje, musím si poradiť sám
Open-source - Výhody
- Väčšina funkcií už je vytvorená
- Komunita, návody, dokumentácie
- Aktualizácie s najnovšími funkciami
Open-source - Nevýhody
- Pri potrebe odbornej pomoci, je potrebné dodržiavať isté štandardy, aby kód pochopil aj iný programátor (na druhej strane to môže byť aj výhoda - uhladený kód)
- Pri aktualizácii môžem prísť o úpravy v knižniciach (ideálne sa vyvarovať úprave knižníc)
Koniec koncov je na každom developerovi, ako sa rozhodne. Ak si je niekto istým tým, že dokáže spraviť spoľahlivý MVC framework, určite odporúčam si to vyskúšať, no treba byť pripravený na kopu nervov a testovaní rôznych prípadov, ktoré už open-source frameworky riešili. Tak či onak, prajem príjemné programovanie stránok v akomkoľvek frameworku.