• Vladimír Kubinda
  • Software engineer
  • 20. Nov 2017

Výber klientského frameworku na projekte ITMS2014+

Na začiatku tvorby novej verzie webovej aplikácie ITMS2014+, stála pred nami otázka výberu vhodného klientkého frameworku. Projekt z pohľadu predchádzajúcich skúseností sa netvoril na zelenej lúke (jednalo sa už o tretiu generáciu softvéru), existovali teda už pomerne jasné predstavy o požiadavkách a analyticko-programátorskom tíme, ktorý bude tento softvér realizovať.

Základné východiskové informácie, ktoré sme brali do úvahy pri výbere klientského frameworku:

  • programovací jazyk Java
  • 95 % všetkých obrazoviek bude prístupných len pre prihláseného používateľa
  • systém musí podporovať širokú sieť rolí, oprávnení a právomocí
  • systém musí spĺňať najvyššie štandardy bezpečnosti
  • aplikácia sa bude vyvíjať dlhší čas, s tým aj spojené riziko možného redizajnu, ktorý vyplynie už počas vývoja
  • veľký počet koncových obrazoviek, cca 1000
  • medzi obrazovkami majú prevahu zložité formuláre a wizardy s komplikovanou validačnou logikou
  • široká škála dynamických prvkov na jednotlivých obrazovkách
  • aplikácia musí podporovať multijazyčnosť
  • klientská vrstva sa musí dať otestovať automatickými testami
  • programátorský tím zložený z programátorov bez hlbšej znalosti HTML, CSS, Javascript

V našej profesnej kariére sme realizovali už viacero projektov a vrámci ich realizácie sme použili rôzne klientské frameworky, ako napr. Java Servlet, JSP, JSF ICEfaces, JSF PrimeFaces, Apache wicket, Scala Lift, GWT, React JS. Nedá sa generálne povedať, ktorý framework je ten najlepší, ale je potrebné detailne zvážiť jednotlivé výhody a nevýhody každého z nich vzhľadom na kladené požiadavky.

V prípade projektu ITMS2014+ tomu nebolo inak, aj keď sa musím priznať, že favorita sme mali jasného pomerne skoro. Kľúcové požiadavky, ktoré rozhodli o výbere boli hlavne:

  • povaha obrazoviek, založených na komplexných stavoch a validáciách (framework musí natívne podporovať prácu so stavom obrazoviek)
  • početnosť a komplexnosť obrazoviek (framework musí podporovať zapuzdrovanie kódu do komponent s jasne definovaným API)
  • natívna podpora AJAX, bez nutnosti poznania implementačných detailov
  • programátorský tím (programátor musí vedieť skladať používateľské rozhranie bez nutnosti hlbšej znalosti HTML, CSS a JS)
  • natívna podpora bezpečnosti
  • produktivita práce

A víťazom sa stáva framework [Apache Wicket] (https://wicket.apache.org/).

Apache Wicket je open source, komponentovo orientovaný webový framework. Wicket je obzvlášť vhodný na komplikované webové aplikácie s množstvom ajaxových prvkov a zložitých formulárov so zložitou validačnou logikou a interakciami medzi jednotlivými formulárovými poľami.

Vo Wickete na rozdiel od väčšiny iných webových frameworkov sa logika UI vrstvy píše v Jave, HTML kód ostáva čistý, nie je znečistený množstvom frameworku špecifických tagov a direktív. To výrazne zlepšuje znovupoužiteľnosť a refaktorovateľnosť komponent (úplne opačný prípad je napr. JSF, alebo JSP kde veľa logiky leakuje do HTML). Výhodou Wicketu oproti JSF/JSP je aj úplná voľnosť pri navrhovaní používateľského rozhrania, pretože Wicket komponenty sú úplne modifikovateľné a štýlovateľné. JSP a JSF komponenty sú naproti tomu „preddefinované“, často sa dá zmeniť iba základný vzhľad komponentov, ako farba a pobobne. Výsledkom je grafický dizajn aplikácie, ktorý je prakticky nadefinovaný dodávateľom JSP taglibov, resp. JSF komponent.

Wicket je vhodný na zložité administračné rozhrania aj kvôli jednoduchému vytváraniu znovupoužiteľných komponent. Napr. stačí raz spraviť komponentu na tabuľkové zobrazenie dát so stránkovaním a na všetkých ďalších obrazovkách iba použiť túto komponentu bez akéhokoľvek copy-pastovania.

Wicket je jasnou voľbou rôznych bankových a poisťovacích inštitúcií aj kvôli out-of-the-box bezpečnosti. Všetky akcie vo Wickete sú viazané k používateľovej session, automaticky sa escapujú formuláre a používateľský vstup, veľmi jednoducho sa integruje s rôznymi security frameworkami, ako Apache Shiro alebo Spring Security. Podpora Ajaxu je vo Wickete samozrejmosťou, a na rozdiel od MVC webových frameworkov sú ajaxové URL linky úplne bezpečné a „neuhádnuteľné“ prípadným útočníkom.

Na základe našich praktických skúseností môžeme povedať, že Wicket je cca 5x produktívnejší ako JSP a cca 3x produktívnejší ako JSF. Z pohľadu rýchlosti zobrazovania je Wicket jeden z najvýkonnejších frameworkov vôbec (zdroj). Z pohľadu stanovených požiadaviek bol preto Wicket jasná voľba.