středa 24. října 2007

Do pranice: Spring Web Flow a nebo JBoss Seam

Právě jsem s naším UI architektem rozebíral dilema, jaký framework zvolit pro naš webový front end. Celá diskuse se se točila kolem Spring Web Flow (dále SWF) a Jboss Seam (dále Seam). Oba frameworky nabízejí přibližně stejné možnosti a tak jsme sklouzávali k drobným nuancím, které alespoň pro mě vyznívají ve prospěch SWF.

Pokud jste ani o jednom z frameworků neslyšeli, pak Vás v případě SWF odkážu na článek Vlasty Vávrů Spring web flow - framework pro management toku web aplikace a v případě SEamu k Petrovi Ferschmannovi na jeho přednášku Seam (a JSF).

Pro nás je důležité, že oba web frameworky nabízejí takzvané konverzace neboli definice toku aplikace. Konverzace je několik request/response cyklů, které jsou z pohledu aplikace jedním logickým celkem např. objednávka (vyplnění objednávky, kontrola dat, volba dopravy, způsob platby, preview, odeslání k vyřízení). Oba dva frameworky lze také integrovat se Springem a to je důležité z toho důvodu, že aplikační logika je z valné většiny skládána Springem.

Co mi u obou frameworků naopak chybí, je větší podpora ve vývojových nástrojích. Oba mají podporu pouze pro Eclipse, škoda že na tom nic nezmění, alespoň pro SWF, oznámená Spring Tool Suite.

Seam

Po mém soudu má Seam dvě zásadní vlastnosti, které pokládáte buďto za výhodu, nevýhodu a nebo minimálně za kontroverzi. Seam vede k masivnímu používání anotací a k obcházení controller/view helper komponenty. Abych byl spravedlivý, pak musím dodat, že i Seam nabízí xml konfiguraci. Na kolik je ekvivalentní anotacím nedokážu posoudit. Controller/view helper je obejit tím, že do se modelové třídy přimo nastavují/vyzvedávají z aplikační logiky. S tím už mám trochu větší problém z hlediska architektury neboť se aplikační logika ohýbá pro potřeby web frameworku. Protože je ta samá logika vystavená přes REST, pak toto svázání přináší problémy.

Výhodu Seamu vidím v tom, že se skrze WebBeans stane J2EE standardem. To přinese rozšíření konceptů, které Seam představil a z toho vyplývající plusy. Abych nezapomněl early draft WebBeans specky je k dispozici, případně si můžete přečíst sérii článků Web Beans Sneak Peek, které představil dvorní autor Gavin King.

SWF

SWF nabízí tři velice zajímavé vlastnosti, které použijeme. První je programové rozšiřování konverzací a programové ovládání (integrační testy). Druhou výhodou je fakt, že SWF je mnohem benevolentnější k volbě view technologie (JSF, Spring MVC, Struts). Třetí výhodou je jako u většiny Spring projektů Open Closed princip, to je pro nás důležité z toho důvodu, že máme stávající framework, který musí spolupracovat.

Seam ani jednu z těchto vlastností pořádně nepodporuje. Řekl bych, že je to způsobené jeho zaměřením. Seam už pomalu přechází do roviny aplikačního frameworku, viz například podpora scheduleru. Oproti tomu SWF je úzce zaměřeno na oblast frontendové části aplikace. Pokud se tedy bude rozšiřovat SWF, bude to pravděpodobně směrem k frontendu, oproti tomu Seam poroste směrem opačným.

Po zvážení těchto kladů a záporů jsem se nakonec rozhodl přiklonit k SWF. Pokud máte nějaký argument pro/proti Seam/SWF rád si jejv diskusi přečtu.