Vlákno názorů k článku
Nette Framework: Refactoring
spring mvc
Re: spring mvc
The best designs are the result of someone's questioning everything around them." (James Dyson) Treba sa občas snažiť aj o veciach premýšľať. Nie sa na ne iba slepo adaptovať. Hlavne v prípade ak človek chce niekam pokročiť vo vývoji.
Re: spring mvc
Re: spring mvc
Nette může být naopak mnohem lepší/jednodušší/snažší na údržbu a na kvalitu zdrojáků pro 80 % projektů.
Nechci a nebudu tady kopat ani do Springu, ani do Nette. Každý framework má to svoje. A brečet, že se assembler nehodí na kódování webu a ruby na programování operačních systémů (nadsázka), to je prostě zcela mimo.
Re: spring mvc
Kazdopadne. Myslim ze si ma uplne presne pochopil. To mi staci, netreba riesit. Kludne si uzivaj svoj jednoduchy zivot a povazuj to za spravne rozhodnutie vo svojom zivote. Mozno je to naozaj to spravne rozhodnutie. Zamestnat sa, mat pravidelny prijem, postavit dom zasadit strom, postarat sa o rodinu. Kazdy je strojcom svojho osudu. Niektori si budu pidizlikat nejake smiesne vlastne riesenia a trpiet cely zivot.. mozno z toho nic nebude.. ale pre pokrok je to rovnako dolezite ako udrzanie rodu. ;-)
Re: spring mvc
Trefné
Podobně nelze Spring cpát kamkoli...
Re: spring mvc
Re: spring mvc
Re: spring mvc
Re: spring mvc
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.
Re: spring mvc
--------
* Sufixy URL adries su uvadzane v anotaciach pre kontrolery.
Tohto sa mozno alebo napisanim vlastneho mapovania requestov na kontrolery, ktory moze byt taky dynamicky ako sa ziada a jednym riadkom ho deklarovat v XML.
Nette adresy generuje plne dynamicky. Ak som pochopil spravne, tak trik spociva v pritomnosti premennej $presenter, ktorej metody vygeneruju URL. Vyzera to ako dobry napad, pretoze naozaj sa zbavite URL adries vo view vrstve.
Ale: Spring MVC absolutne neriesi, v com bude napisany view. JSP? Freemarker? JasperReports? RSS? Staci, ze view rendered dostane modelovu mapu a ako ju zrenderuje je na nom. Nette podporuje primarne PHP, ako je to s inymi vrstvami?
* Modelom moze byt lubovolna trieda. Myslim, ze uz po Struts 1.x sa ludia poucili a zistili, ze nema zmysel, aby model musel byt nieco specialne. Automaticke vkladanie navratovych hodnot do modelu je super vec. Tu sa zhodneme
* Kontroler. Spring MVC razi zasadu, ze obsluzne triedy maju byt jednoduche, najlepsie bezne triedy s anotaciou. (Anotacia je ekvivalentna marker interfacu bez metod).
* Mapovanie nazvu view na konkretnu implementaciu je riesene jednym riadkom v XML.
* Odkazovanie. "redirect:" je skratka pre pohodlnych. Pokojne mozete vratit specialny RedirectView, kde uvediete logicke meno viewu a model (presny ekvivalent "->redirect()"). Alternativne mozete view do kontrolera zadrotovat cez dependency injection a kontroler ani nebude tusit, ze nejaky redirect sa deje.
Tu by som podotkol, ze netreba mat totalnu paranoju z XML. Bezna springova aplikacia ma aj tak XML subor pre dependency injection, cize tam je to jedno (a pozor: DI je velmi dobry pattern, ktory vyvoj velkych aplikacii sprehladnuje).
////////////////////////////////////////////
Inak som velmi poteseny, ze vidim nejaky slubny MVC framework pre PHP. PHP si ho zasluzi.
Mam len otazku:
* ako sa riesia ine formaty view? (Vid vyssie)
* ako je mozne pouzivat vlastne formulare (Nette generuje kod formularov dynamicky, toto Spring MVC nema, view vrstvu nechava na vyber implementatora)
Re: spring mvc
Este mi napadlo: ktore vlastnosti by vam chybali?
Mna primarne zaujalo to generovanie formularov spolu s JS validaciou. To vyplyva z generovania formularov cez PHP.
Re: spring mvc
Naopak uživatelům Springu by asi nejvíc chybělo propojení s modelem a databázi.
Ono se na to těžko odpovídá, protože Spring jsem viděl jen z rychlíku, přitom sílu frameworku člověk pozná, až když s ním pracuje.
Re: spring mvc
Ale: Spring MVC absolutne neriesi, v com bude napisany view. JSP? Freemarker? JasperReports? RSS? Staci, ze view rendered dostane modelovu mapu a ako ju zrenderuje je na nom. Nette podporuje primarne PHP, ako je to s inymi vrstvami?
Podobně to funguje i v Nette. Zítra by měl vyjít další díl seriálu, který se týká právě renderování šablon, takže tam to bude popsáno podrobně.
Kontroler. Spring MVC razi zasadu, ze obsluzne triedy maju byt jednoduche, najlepsie bezne triedy s anotaciou. (Anotacia je ekvivalentna marker interfacu bez metod).
Anotace PHP prakticky nezná. Zkusil jsem s nimi přijít v Nette, ale narazilo to na technické a „filosofické“ problémy, takže se držím zpět ;)
Odkazovanie. „redirect:“ je skratka pre pohodlnych. Pokojne mozete vratit specialny RedirectView, kde uvediete logicke meno viewu a model (presny ekvivalent „->redirect()“).
Tady mi šlo spíš o ty URL, které Nette generuje dynamicky. Tedy ačkoliv když vrátím RedirectView, tak se jich nezbavím. (teda jestli to dobře chápu).
Tu by som podotkol, ze netreba mat totalnu paranoju z XML. Bezna springova aplikacia ma aj tak XML subor pre dependency injection, cize tam je to jedno.
Ano, to je věc zvyku. Ve světě PHP jsou preferovanější INI soubory, nejspíš proto, že samotné PHP se tímto způsobem konfiguruje.
(a pozor: DI je velmi dobry pattern, ktory vyvoj velkych aplikacii sprehladnuje).
Bezpochyby!
ako je mozne pouzivat vlastne formulare (Nette generuje kod formularov dynamicky, toto Spring MVC nema, view vrstvu nechava na vyber implementatora)
V podstatě lze volit v řadě úrovní od prostého manuálního vykreslení a obsluhy formuláře až po plně automatické v režii objektu Form (například automatická obsluha + manuální vykreslení v šabloně). Asi největší vývoj probíhá na straně automatického vykreslování, protože je to pohodlné (čti: uživatelé to chtějí), ale zároveň by to mělo být co nejlépe konfigurovatelné (čti: každý formulář vypadá úplně jinak).
Re: spring mvc
Prezentacia (ktorej som zhodou okolnosti autorom) pokryva ,,highlights" zo stylu vyvoja Spring MVC, ktory je zalozeny na konvenciach a anotaciach. Paralelne s nou existuje ,,stara" moznost, kde su konvencie vymenene za XML konfiguraciu. Ale zakladna filozofia ostava taka ista.
V ktorych konkretnych bodoch vidite vyhody Nette oproti Spring MVC? (Prirodzene, su to dva rozlicne frameworky pre dva rozne programovacie jazyky.)