Devel.cz Lupa Měšec Podnikatel Root Zdroják.cz DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Názor k článku
Nette Framework: Refactoring

David Grudl aura:74
3. 4. 2009 16:46

Re: spring mvc

celé vlákno
Ano, ano, přesně to tvrdím a skromnosti mám doufám přiměřeně. Nepleťme si skromnost a pokoru. Tu jsem v reakci na váš komentář odhodil, i když chápu, že jste to myslel v dobrém, nicméně jsem chtěl být také provokativní. Ovšem argument "jak by něco lokálního mohlo být v jakémkoliv směru lepší než to, co vytvořill člověk s anglickým jménem", ten rozhodně neberu ;)

Pokud bychom skutečně chtěli oba frameworky srovnat, musí se to odehrát konstruktivně, v rovině rozumných argumentů - já jsem pro a klidně začnu.

První a nejdůležitější věc - nika Javy a PHP se téměř neprotíná, tyto jazyky si téměř nekonkurují. Dosud tu není plnohodnotná platforma pro hostování Javy stylem ověřeným pro PHP, stejně tak PHP nemá žádnou enterprise edici. Tudíž ani frameworky si nekonkurují a nelze říct "k čemu kvalitní framework pro PHP, když existuje Java a Spring?".

Srovnání začnu od Modelu, protože to je oblast, kterou Nette záměrně přenechává jiným knihovnám. Důvod je ten, že způsob "class diagram = E-R diagram = formulář", je sice na pohled hodně elegantní a dnes i populární, ale s praxí se překrývá jen v 80-90 % a zbývající procenta se strašně těžko pokrývají. Nette hledá jiné cesty, viz třeba http://phpfashion.com/mvc-paradox-a-jak-jej-resit.

Vedle toho controller a view můžeme velmi dobře porovnat. Podle odkazovaného PDF jsou oba frameworky v mnoha směrech velmi podobné, zaměřím se tedy na rozdíly:

- URL vrstva: zatímco Nette Framework ji zcela odděluje, Springu je s URL úzce svázaný. Díky tomu jsem mohl třeba před dvěma týdny přídáním JEDNOHO řádku http://jdem.cz/a6gq7 dosáhnout toho, že tvar všech URL v demonstrační aplikaci se dynamicky změní podle konfigurace serveru. Ve Springu by podobný efekt (opět vycházím z PDF) znamenal změnu na mnoha místech kódu kontroleru a šablon.

- kontroller: ve Springu se jim může stát jakákoliv třída, v Nette musí implementovat interface IPresenter. Je to rozdíl, ale nedokážu jej zhodnotit. Fungování metod s parametry je v obou frameworcích prakticky totožné. Předávání návratových hodnot naopak Nette nemá.

- view: odvození jeho názvu a namapování na šablonu je opět velmi podobné, jen Nette se vyhýbá konfiguraci v XML. Podobná je dokonce i syntaxe šablon. Z PDF těžko říct, který jazyk je v praxi silnější, jak to funguje v Nette uvidíte v příštím díle.

- validace dat: Nette věc pojímá trošku jinak, ale nějaký zásadní rozdíl v tom nevidím.

- odkazování: opět to souvisí s oddělenou URL vrstou, takže místo return "redirect:nejake-url.do" ve Springu se v Nette odkazuje přímo na název metody kontroleru, tj. $this->redirect('metoda'); V tom vidím zásadní přínos, místo, kde by se Spring mohl inspirovat.


Suma sumárum, Spring MVC vypadá jako velmi dobrý a šikovný framework. Nevidím ale nic, kvůli čemu bych měl padnout na kolena a opustit Nette. Naopak řada vlastností by mi chyběla.