Slabiny Nette Frameworku

Poslední dobou čímdál více narážím na „mladost“ Nette Frameworku a tak jsem se rozhodl sepsat, co mi vadí a na jaké problémy narážím.
Žádný kousek software a nejen software není dokonalý a vždy musí člověk hledat kompromisy, nejinak je tomu i u PHP Frameworků. Prošel jsem si, jako snad každý PHP programátor, stádiem, kdy jsem měl jakýsi vlastní „framework“, který mi vyhovoval, tento „framework“ jsem používal někdy do roku 2008. V té době již existovala spousta dalších, jako byl třeba zend . Zend vyhovoval mým požadavkům takřka perfektně, ale byl to „moloch“ a já mám raději menší. CakePHP mi připadá strašně zmatený a pak je tu Symfony, u kterého mi nevyhovuje, že spousta věcí se řeší pomocí yml místo PHP. Tak jsem zvolil Nette Framework, který mi vyhovoval nejvíce. Nette má totiž nespornou výhodu – namespace verzi.
Nette používám v podstatě od prvního vypuštění zdrojáků, kdy toho spoustu neumělo. Ale to nebyl problém, protože spousta věcí, která mi scházela, se dala jednoduše doplnit z mého „framewoku“ a navíc Nette postupovalo mílovými kroky vpřed a brzy jsem své knihovny zahodil úplně. S postupem času ale zjišťuji, že to není tak růžové, jak se na první pohled zdálo. Problém, který není ani tak problémem, ale vyvolává ve mně rozporuplné pocity je, že ač má nette silnou, hodně silnou komunitu, tak vývoj jako takový spočívá na bedrech jednoho jediného člověka. Nevadí mi ani tak to, že je to „one man show“, jako spíše razantní útlum vývoje a komunikace ze strany tvůrce. Nevím, čím to je a ani nechci působit jako že si stěžuju na něco, co mám zdarma. David má na práci jistě spoustu jiných věcí, než věnovat 100% komunitě a vývoji. Třeba něco kutí a bude to bomba, ale podívejte se sami na aktivitu v posledním měsíci a půl.
Zavináčová magie
Snippety jsou super věc, která hodně usnadní práci, ne však tolik, jak se může na první pohled zdát. Je tu totiž zavináčová magie – problém je v tom, že musíte přijít na to, kam zavináče dát a kam ne. Máme tu sice super kuchařku od Pandy, ale i tak se ne vždy podaří na první či druhý pokus. Jsou tu sice nové snippety které fungují lépe, ale bohužel také nejsou zcela bez chyb.
Validace příliš svázané s formuláři
Práce s formuláři je v Nette vyloženě radostí, která usnadní spousty práce a času. Spoustu času ušetří hlavně validátory. Je tu ale problém, protože ač Nette o sobě tvrdí, že je DRY, tak validátory, které se používají u formulářů, jsou s nimi doopravdy hodně svázané. Problémem tedy je – pokud chcete validovat v modelu – musíte si napsat validátory vlastní.
Absence databázové vrstvy
U modelů ještě zůstaneme, protože má jednu dobrou vlastnost – není svázané s žádnou datovou/databázovou vrstvou. Což z mého pohledu přináší daleko více problémů, než užitku. Protože díky tomu v podstatě není definován žádný standartní formát pro modelovou část aplikace. Neexituje žádný interface pro modelové objeky ani nic podobného. Dalším problémem je absence malého, ale kvalitního ORM. Každý dnes hojně používaný framework ho má, Nette nikoli. Dibi se s Nette dá suprově propojit a spolupráce těchto knihoven je takřka geniální, ale není to ORM. Což je o to zarážející, pokud si uvědomíte, že Dibi používá minimálně 80% projektů postavených na Nette (to číslo jsem si vycucal z prstu, ale troufám si tvrdit, že daleko od pravdy nebude). Ano je tu super Doctrine, ale u toho mám stejný problém, jako u Zendu a navíc jako programátorový opensource projektu mi nevyhovuje jeho licence.
Dokumetace
Dnes už to možná spoustě lidí připadá jako obehraná písnička, která už se říká automaticky. Skutečnost je taková, že dokumentace je v daleko lepším stavu, než bývala, ale pořád to není ono. Já s tím až takový problém nemám, protože si vystačím s API. Ale pro nováčky to problém být může.
Tak snad jsem to sepsal smyslupně a teď mě začněte kamenovat…
19 komentářů
Patrik Votoček (Vrtak-CZ)
nový
Btw pokud máte tip na kvalitní PHP framework s namespace sem s ním…
A. Nojman
nový
Ovšem další nespornou výhodou Nette frameworku je existence Nella CMS.
Ondřej Mirtes
nový
Že David moc neprodiskutovává a zneprůhledňuje vývoj, to je pravda. Mohl by být sdílnější, prospělo by to všem a možná by se i zvýšil zájem o framework.
Ovšem ty zavináče jsi tu vůbec nevysvětlil, o co vůbec jde. Nette má moc pěknou podporu AJAXu a zavináče tam jsou z toho důvodu, že je tam principiální problém, který nelze nějakým jednoduchým způsobem obejít.
Validace – souhlas, ale mělo by se to teď někdy taky řešit.
Absence databázové vrstvy – je tu dibi, které ani žádné ORM nahrazovat nemá a funguje jako Table Data Gateway. Je napsané tak, že se pohodlně používá i v šablonách a právě v těch 80% případů není nutné použít ani něco jiného. A když i přesto chceš, Nette ti žádné překážky neklade.
Dokumentace – taky souhlas.
Tweets that mention Slabiny Nette Frameworku » Patrik Votoček (Vrtak-CZ) -- Topsy.com
nový
[…] This post was mentioned on Twitter by Teuzz, Patrik Votoček. Patrik Votoček said: New Blog post: Slabiny Nette Frameworku http://www.vrtak-cz.net/…e-frameworku […]
Tomáš Jukin
nový
Ahoj, pěkný post, já bych jen ještě přidal pár svých postřehů:
Poznámka: Díky tomu, že v současné době v podstatě přecházím z PHP na Ruby On Rails (ale ještě musím dodělat pár dříve rozjetých projektů v PHP), tak mám unikátní možnost náhledu na obě dvě technologie a jejich přípandé srovnání. (Nechme ale teď prosím stranou věci typu „To nemůžeš srovnávat, protože RoR je mnohem rozšířenější než Nette apod.“ – srovnávat to mohu, to že Nette není rozšířené a jen a pouze chyba komunity, ještě se k tomu dostanu…)
Prosím, stejně jako řekl patrik neberte následující řádky jako to že kritizuji něco co mám zadarmo, ale jako že vám předkládám názor na to, jak by se to mohlo zlepšit.
Na Nette Frameworku, což je dle mého názoru stále nejlepší PHP framework, který znám, mi vadí následující věci (o některých už psal i Patrik):
1. Přístup hlavního vývojáře projektu – Ano, David Grudl, ač odvedl kus naprosto perfektní práce, nyní svým přístupem dle mého názoru rozvoj frameworku spíš brzdí než mu pomáhá – pozor mluvím o přístupu, ne o práci. Konkrétně tedy:
2. Nette Framework o sobě tvrdí, že je MVC, ale není to pravda, je to VC framework, který umožňuje do sebe to „M“, tedy model, nebo modely nějak propojit. Obšem toto propojení nění nijak „normalizováno“ a Nette Framewrok, jak už patrik řekl, sám modely nijak neřeší. A to je velký problém. Sice nabízí relativně těsnou spolupráci s DBAL dibi, ale to také modely nijak neřeší. Navíc díky patrikem již zmíněné špatné dokumentaci ve spoustě začínajících nebo ne příliš zkušených vývojářů Nette Framework vzbudil mylnou představu, že Model = Třída dle návrhového vzoru Table/Row Data Gateway, což je také velice špatně.
3. Ještě k tomu ORM a modelům. Já chápu že se Nette snaží nestranit jednomu konkrétnímu řešení, ale to mimo jiné znamená, že jej nelze použít jako by u frameworku mělo být zvykem systémem „je to kus SW, který je out of the box“. Nette Framework rozhodně out of the box není. To, co si totiž stáhnete je něco, s čím si musíte dost dlouho hrát aby to umělo něco rozumného – např. už jenom konfigurace frameworku tak, aby správně detekoval produkční a development režim (což je BTW jedna z propagovaných „killer features“ nette frameworku) je pěkné WTF a ani tohleto není v distribuci, kterou si stáhnete, ready out of the box.
4. Dalším velkým problémem jsou addony, extras, nebo chcete-li pluginy do Nette Frameworku. Ano, Nette Framework je rozšiřitelný, lze v něm rozšířit naprosto cokoliv. Dřívější situaci, kdy prakticky žádná rozšíření nebyla nahradil stav, kdy jich několik je – a docela zajímavých a dobrých, ale naprostou tragédií je jejich instalace. Drtivá většina stávajích rozšíření není v release verzi (u těch lepších to autoři veřejnš přiznávají), ale lze najít i taková, která se tváří jako „ready for production“, a ready nejsou ani omylem. Zkrátka a dobře o něčem jako jsou gemy z ruby se PHP vývojářům zřejmě ani nesní a asi nikdy nebude.
Vypadá to, že na Nette Framework házím špínu, což možná trošku dělám, ale i přesto věřte, že nette framework stále považuji za nejlepší framework pro PHP vůbec – a když píšu ještě v PHP, tak jej používám. Sice než jsem mohl začít něco rozumného dělat, tak jsem si musel vytvořit relativně robustní nadstavbu nad ním, ale funguje to. Každopádně to svědčí o tom, jak moc tragická situace okolo frameworků v PHP je a pro mě osobně je to o důvod víc, proč od PHP pryč. Osobně jsem za přechod na Ruby on Rails velmi rád. A pokud o tom také uvažujete, mohu jen doporučit. Když to uděláte můžete se těšit na to, že tam jsou tyhlety „porodní bolesti“ již léta vyřešeny. Tam framework znamená nástroj, a ne jen velmi zajímavou sadu knihoven (byť s řadou revolučních záležitostí – např. šablonovací systém Nette Frameworku ten, který má v sobě rails v něčem předčívá, ale finálně mají rails deset let náskok), která možná časem bude skutečně efektivním nástrojem, jakým jsou Rails už nyní.
P.S.: To políčko na psaní komentářů je hrozně moc malé:-) a díky za post a doufám, že můj komentář není příliš dlouhý.
P.S.2: A komentáře typu: „Rails jsou tu už ale XX let a Nette jen Y, to nemůžeš srovnávat!“ si nechte prosím stranou, srovnávat to mohu, protože já hledám efektivní nástroj teď a ne za pár let. A zajímá mě, jak moc mi může zjednodušit život rails, nebo Nette nyní, než jak to bude moci možná časem. A z tohoto srovnání vycházejí rails mnohemkrát lépe…
Patrik Votoček (Vrtak-CZ)
nový
[2] @Ondřej Mirtes ad zavináče) účelem článku nebylo vysvětlit jakej principielní problém tam je ale že tam je.
ad dibi) já taky nikde nezmiňuju že by tomu u dibi mělo být jinak. Moc dobře vím že dibi nemá být ORM. Ja jenom říkám a upozorňuju že tu žádné použitelné není.
Patrik Votoček (Vrtak-CZ)
nový
[3] Tomáš Jukin vpodstatě s tebou souhlasím sám už více jak rok váhám zda udělat ten těžký krok a přejít na RoR nebo Django . Zásadní problém je ten že se nejedná pouze o změnu frameworku ale i o změnu programovacího jazyku a tak se pořád zdráhám. Další problém je v tom že já pořád nejsem v anglických textech úplně svůj a informací o Ruby/RoR nebo Pythonu/Djangu v češtině moc není. Ale to není problém frameworků ale čistě můj. No což dnes ráno jsem udělal rozhodnutí že to týden skusím s RoR a pokusím se nasát nějáké vychytávky abych to reimplemetoval do Nette. Ale obávám se že to dopadne tak že PHP už nebudu chtít ani vidět. :-)
Jinak jediné v čem s tebou ne uplně souhlasím je první bod v tomhle davida plně chápu a souhlasím s tímhle postupem. (Takové Appleoidní :-) )
Ondřej Brejla
nový
Proč by tě měl někdo kamenovat, pouze si shrnul to, co je všeobecně známé. Bohužel je to tak.
Nicméně mě to naštěstí nenutí k přechodu jinam…s těmi problémy žijeme už tak dlouho, že už je ani nevnímám :-)
Tomáš Jukin
nový
Jsem rád že se shodneme, s RoR ti přeju hodně zdaru:-) – Já jsem byl před několika měsíci přesně ve stejné situaci:-), když jsem začal ten „těžký“ krok dělat tak jsem zjistil že vlastně až tak moc těžký není, ba naopak:-)
Co se týče ideje „portování cool věcí z RoR do Nette“, tak velmi brzy narazíš – narazíš na to jak moc je PHP debilní jazyk:-D – věř mi, sám jsem po té cestě šel:-).
Ad davidův přístup: NN já zcela a naprosto beru že dřív než něco vypustí veřejně tak to musí být už done – ale Steve Jobs také věci nevymýšlí sám, ale s týmem těch TOP lidí z Applu:-) – A to co jsem tím chtěl říci, bylo jen to, že by David měl dělat to samé a využívat k tomu několik TOP lidí z Nette komunity – ne aby to dělal jen ON sám… pak by se totiž zamezilo dementualiztám jako např. změny Object::getClass → Object::getReflection::getName, že… a IMHO by to i nakoplo vývoj…
Díky za odpověď:-)
Tomáš Linhart
nový
Patriku ať už se rozhodneš pro Python nebo Ruby, tak uděláš dobře. Oba jazyky ti nabídnou o tolik víc, že si budeš říkat jak ti mohlo stačit to co umělo PHP.
K tomu, že ti dělají problém anglické texty, tak je možnost si zakoupit nějakou českou knihu, která o frameworku vyšla, ale každopádně bude to už bude ke starým verzím, což není moc dobré. Doporučil bych ti spíš začít tím, že začneš číst prostě anglickou dokumentaci jednotlivých frameworku a to čemu nebudeš rozumět si dohledáš ve slovníku. Ze začátku asi strávíš víc času v tom slovníku, ale časem se ten poměr začne měnit a krom nového programovacího jazyka se zdokonalíš i v angličtině a zabiješ dvě mouchy jednou ranou. =)
Honza Marek
nový
Inza: Buď u těch addonů konkrétnější. Takhle nevim, jestli se ta kritika týká i mojí práce nebo ne :-D
David Grudl
nový
Jsem rozhodně rád za konstruktivní kritiku. Aby to nevyznívalo jako „pojďme dělat v Rails/Symfony/Zend, tam problémy se snippety/validací/atd“ nejsou, pokusím se uvést i pohled one-man-vývojáře ;)
Ano, v Rails a spol. tyto problémy nejsou, protože takové featury prostě nemají. Tyto frameworky, pokud se nemýlím, vůbec nemají šablonovací vrstvu, natož nějaké snippety či integrovanou JavaScriptovou validaci. Nette samozřejmě podprouje validaci na straně modelu, je to hned v příkladu CD-collection (validace v modelové třídě Users a předání chyby do formuláře pomocí $form->addError). Nicméně nabízí se i možnost definovat pravidla přímo pro formulář, ze kterých se generuje JS validační skript, ale to je prostě featura navíc.
Jasně, bylo by fajn obojí ještě lépe spojit a zjednodušit – ale tím se dostávám k druhému: zatím nikdo s řešením nepřišel. Přitom všichni mají možnost něco do Nette naprogramovat, diskutovat o tom na fóru, stejně jako mají všichni možnost přispívat do dokumentace. Že tak činí jen pár lidí z mnoha je smutné, ale jsem jim za to vděčný. Přidej se!
ad absence databázové vrstvy: Inzo, M v MVC neznamená ORM. MVC je rozdělení aplikace do tří vrstev a jedna z nich (tedy M) může využívat jako svou součást nějaké ORM.
Tohle je ryze politický problém. Když bych do distribuce Nette automaticky přidával Doctrine (jak to dělá Symfony), změní se tím tolik? Nejspíš ano, najednou bude mít Nette „své“ ORM. A pak se objeví lidé, kteří si budou stěžovat, proč právě Doctrine a ne něco jiného.
Nicméně nevylučuju, že Nette dříve či později s nějakým ORM v distribuci spojím, pro klid duší všech uživatelů ;)
Patrik Votoček (Vrtak-CZ)
nový
[12] David Grudl Validace v
Usersmodelu v CD-Collection mě nepřipadá zrovna jako dobrý příklad protože je to dost specifické. Ale ano dalo by se to brát. Mě se jedná spíše o to že neexistuje nic jakIModelnebo něco jakoIModelDriverkterý by jasně definoval základní metody modelu ( CRUD ).Má narážka na ORM rozhodně nebyla myšlena že má přímo Nette nějáké to ORM obsahovat, ale spíše že neexistuje žádné které by s Nette „dokonale“ spolupracovalo za což jistě může nemalou měrou právě absense onoho interface. ORM je dneska prostě trendy stejně jako Nette… :-)
Co se týká oddělení validátorů od formulářů tak tahle myšlenka mě v hlavě leží už doopravdy dlouho. Jen jsem se ještě nedostal k pokusu realizovat to.
A v poslední řadě snippety ano spousta Frameworků (nejen PHP) žádné šablony nemá. Nicméně z Nette na mě působí že se snaží obsahovat pouze „100%“ odladěné funkce kterou snippety bezpochyby nejsou. Tím nechci tvrdit něco špatného ale mělo by se to řešit. (Nebo je to jenom vyjímka potvrzující pravidlo? :-) )
Tomáš Jukin
nový
Ad David Grudl:
Díky za reakci Davide, několik mých poznámek:
Jinak nevnímej to prosím jako že jsem na Nette zanevřel, nebo tak – naopak je to stále uúplně supr framework, jen prostě ukazuji cestu kudy se dá jít dál:-) – a jde mi o to, že dle mého názoru je občas lepší do frameworku něco zaférovku zakomponovat aby ti ten framework opravdu pomáhal (samo že je dobré udělat slabou vazbu na tuto implementaci, např porobně jako máš RobotLoadera – součástí Nette je suprový RobotLoader, který skvěle zefektivňuje práci vývojáře, ale když chci mohu ho vyhodit a nahradit si ho svým vlastním – něco podobného by mělo být i s modely v Nette – prostě napsat nějaká interface – např základní interface pro ORM i DBAL je stejné) – efektivně a ne že si musíš všechno dopsat sám nebo používat těch pár pluginů co už je a z nich opravdu produkčně použitelných je jen malá část (to není špatně, ba naopak, akorát to bohužel silně ovlivňuje to, zda si vyberu k vývoji nové věci PHP a Nette nebo Rails a Ruby). – Nette je prostě stále zatím mladé. Každopádně kdž budu vyvíjet v PHP, tak jednoznačně v Nette ;-).
Roman Sklenář
nový
Patriku, nedívej se na ten problém jako na „přejít/nepřejít“, ale tak, že kolik umíš jazyků, tolikrát jsi člověkem :)
Ne vážně, nemá smysl řešit jestli si zvyknu nebo ne, když jsem zvyklý dělat věci X let tak či onak. Stejně tak řešit použití závorek a podobné. Zvykneš si když chceš, já si zvykl, Inza si nejspíš zvykl a i jiní si taky zvykli. Ikdybys to třeba nakonec zavrhl, dá ti to alespoň nadhled nad věc, přinese ti inspiraci a při dalších projektech se budeš moct rozhodnout, které řešení je nejvhodnější pro konkrétní situaci.
Taky jsem se k vyzkoušení něčeho nového musel překonávat, zlomila to až zkušenost s Pythonem a Djangem, kterou jsem musel absolvovat. Snad jen malá rada: nepřenášet si návyky. Smířit se s tím, že názvy metod se píší lower_case, odsazuje se nejlíp dvěma mezerama a podobně.
A abych zde zmínil i nějakou slabinu… ty hlavní již zde byly řečeny, takže nechci říkat, že jde o slabinu ale třeba naznačit směr vývoje. Rails se mi líbí mnoho vlastností ActionControlleru, od RESTful přístupu až po rozlišování odezvy pomocí respond_to (ikdyž něco takového se už rýsuje i v Nette :)) a taky více možností routování. Abych ale Rails jen nechválil, tak má u mě mínus za to že nemá (nebo jsem ještě neobjevil) kanonizaci (http://doc.nettephp.com/…cation-route#…)
Tomáš Linhart
nový
Roman: Je na to plugin do Rails – http://github.com/…anonical-url
JakubS
nový
Pořádná validace v modelu chybí.
Absence Nette ORM – dá se přežít.
Dokumentace – IMHO slabá (toto je místo kde mohla slavná komunita Davidovi nejvíce pomoci a výsledek je lehce rozpačitý viz quickstart -vedoucí NDP prchá k RoR?)
A to že je David s uvolňováním novinek tajemný jak hrad v Karpatech je mrzuté (i já jsem zvědavý) ale pochopitelné: chrání dobré jméno Nette tím že nezveřejňuje nedotažené koncepty.
Nette je stále jeden z nejlepších PHP Frameworků na světě a Davidovi patří velký dík že se o něj dělí s komunitou i když mu kdekdo chce kecat do toho co a jak má dělat.
veena
nový
Díky za diskuzi. Mám jen pár poznámek.
Neviňte autora, že měsíc nevydal žádnou verzi, v době, kdy se stěhuje.
Mluví se o ORM. Bylo by super. Proč se ale komunita nedohodla a neudělala jedno kvalitní ORM, ale místo něho jich vzniklo asi 5 různých? Tvrdíte, že byste chtěli přispívat do Nette. Tak začněte s tímhle.
Jak je na tom Nella CMS. Kolik to táhne lidí? Jak často se aktualizuje? Kde má dokumentaci?
Pak je tu problém času. Podle mě neni ve fyzických silách žádného člověka ani Davida, aby sledoval celé fórum a reagoval na všechny příspěvky v takovém počtu, v jakém se objevují. Naposled když jsem s ním mluvil, tak říkal něco o (500+ nepřečtených příspěvků).
Navrhoval bych, aby zvolil moderátory, kteří se budou starat o část fóra, která se týká uživatelů Nette. V případě, že by se zde objevilo něco užitečného pro vývoj, tak by založili topic v části „Vývoj Nette Frameworku“. David by sledoval pouze tuto část a bugy. Mohl by se tak věnovat pouze vývoji a případně ho taky víc s vámi probírat.
Patrik Votoček (Vrtak-CZ)
nový
Nella CMS není a nikdy nebyla uveřejněna použitelná verze. Bylo zveřejněno pouze takové „Preview“. S dotazem kam směřovat další vývoj. Rozhodování se kam to směřovat zabralo celkem hodně času. (Už je rozhodnuto). Nicméně bylo potřeba dořešit i některé další věci viz nový článek: http://www.vrtak-cz.net/…rm-pro-nellu
Co se týká fóra tak s tím také bojuju a donedávna jsem četl všechny ano všechny posty na fóru.
Jinak v Nette komunitě se snažím být aktivní. Vzal jsem si na svá bedra videa a záznamy z PS. Pak jsem také začal přispívat do dokumentace.