Nette, proč tak složitě? Nebo se to jen zdá?
- gee
- Člen | 2
Hezké odpoledne,
měl bych dotaz, který má svoji hloubku ve smyslu a použití jazyka PHP. Ten dotaz zní: „Nepřijde Vám Nette, Zend a podobné frameworky (tím tedy nechci nařknout jen Nette) zbytečně komplikované s snahou vyhovnat se frameworkům v .NETu apod.?“
Před několika lety, jsem napsal v PHP vlastní framework (PHP 4.x), který mi dost významně zjednodušil a zkrátil vývoj. Při dnešním pohledu z5, musím říct, že se jednalo o jakousi velmi jednoduchou obdobu M-V-VM. Když dnes koukám na M-V-VM a WPF a tým lidí, kteří jej používají (v tomto případě moji podřízení), přijde mi, že 40% času je tu věnováno něčemu, co vlastně nenese dostatečnou přidanou hodnotu (lze to napsat stejně funkční, reusovatelné a elegantní, ale za méně času) a de facto se jedná o hromadu kódu, který je až zbytečně ukecaný. Přijde mi to, jako obdoba softwarové krize z minulého století, kde se vývojáři vyřádili, ale výsledný produkt nebyl zrovna použitelný (problém spočíval ve vytváření aplikací). Podobné mi to přijde dnes s frameworky. Leckdo se na nich vyřádí a seberealizuje a ukazuje krásu jazyka a jeho možnosti, ale proč? V tomto ohledu musím dát za pravdu mnohým především ochodníkům, že 100× lepší aplikace je k ničemu, pokud ji předběhla jiná, (a získala trh) horší, ale funkční. .. tím chci naznačit, že není dobré dotahovat framework až do krajností za každou cenu, jelikož jeho používání může doplatit na jeho velikost/robustnost/časovou náročnost/atd. ..
V současné době uvažuji o napsání nové verze toho mého frameworku v OOP v PHP, a tak se rozhlížím a čtu, co všechno už existuje, a jak to funguje. Nette mi připadá jako docela dobrá varianta a možná náhrada za vlastní vývoj, ALE .. máto svá ALE: od frameworku očekávám značné zjednodušení práce a to jak automatismy, tak značným reusem již něčeho produkovaného kódu bez kladení překážek v implementaci i ne zcela běžných věcí. V tomto ohledu mi přijde, že Nette začíná dost kostnatět (v automatismech pro podporu produkčního kódu) a některé věci se musí ohýbat, aby to fungovalo.
Máme tedy dotaz: Spěje Nette správným směrem? Doufám, že DGX o tomhle popřemýšlí, aniž by i hned začal bránit Nette a zkusí odpovědět.
- Ot@s
- Backer | 476
Dle mého záleží, co chceš dosáhnout, jaké máš návyky a jestli jsi ochotný učit se něco nového. Možná Ti neodpovím úplně přesně, ale protože jsem před nedávnem podobně smýšlel, cítím potřebu zareagovat.
Nauč se Nette nebo ZF. Naučíš se přemýšlet v jiných souvislostech. I když u toho nezůstaneš, je to přinejmenším inspirativní. Nette je výborná a promyšlená záležitost (taky mám své „ale“). Zdánlivá složitost jde na vrub možnostem a komplexnosti frameworku. Dobrý návrh dělá aplikaci přehlednou/modifikovatelnou i po delším časovém úseku (vzpomeň si na svůj framework/aplikaci –3 roky). Výčet benefitů je nad rámec tohoto příspěvku…
To, co nazýváš „složitost“ je tak trošku neochota přijmout něco nového, začít přemýšlet (dost zásadně) jinak (mluvím z vlastní zkušenosti). Jde o ty vžité automatismy. Roky člověk programuje neobjektově/pseudoobjektově (…no jako prase) a najednou je tu něco, kde se objektově pracuje od A až po Z, kde máš sice „mantinely“, ale po pochopení principů Tě takřka vůbec neomezují. Zkrátím to – „investuj“ do Nette čas, vydrž pár týdnů a uvidíš, že to smysl má. Toto je alespoň moje zkušenost.
- redhead
- Člen | 1313
V tomto ohledu mi přijde, že Nette začíná dost kostnatět (v automatismech pro podporu produkčního kódu) a některé věci se musí ohýbat, aby to fungovalo.
Máš příklad??
Za mě musím říct, že si už neumím představit dělat něco bez frameworku. Automatizace: validace/tvorba formulářů, snippety, šablonovací systém, bezpečnost atd. a to všechno bez větší námahy, kterou bych jinak musel sám vynaložit. Navíc Nette je hezky krásně napsané, dodržuje jasný a přehledný coding-standard a dělá se v něm velice rychle.
Sám bys při svém vývoji zjistil, že by se ti najednou hodilo tohle a pak tamto a časem by si došel do jistého „stejně velkého“ frameworku. Třeba lepšího a třeba taky horšího (ať už výkonnostně nebo bezpečnostně).
- newPOPE
- Člen | 648
No pokial je pravda ze NETTE je pisane stylom co ludia potrebuju a co realne pouziva tak to tam je.
Mam moznost porovnat len 2va dalsie
- Zend → dokaze asi vsetko :-). ale kolko z toho pouzijes na 80% apps
- CodeIgniter → to by som ani FW nenazyval. ziadny coding-standard kazdy si to pise ako sa mu paci… a potom to tak vyzera ked mas upravit app a nevies co vsetko spadne :-)
A ani pri jednom som nezazil take sablony. to je radost robit :-D
- Honza Kuchař
- Člen | 1662
Nette není vůbec složité. (teď píšu aplikaci a Total commander ukázal přes 13 000 souborů, v takovéto aplikci, je pak Nette zanedbatelné) Podporuje automatizaci dost výrazně a pokud ti ta automatizace v tom či onom nevyhovuje, odstavíš ji a používáš nějaké vlastní řešení (ještě se mi nestalo, že by to snad někdy nešlo).
A ještě dodám, nette na Nette je právě flexibilita. Dá se napsat od statického webu, před hodně dynamický web a až po aplikaci s GUI generovaným na straně klienta, s tím, že na serveru je jen back-end. A ve všech těchto použitích Nette ušetří spoustu práce. Samozřejmě, že u těch 1. dvou nejvíce. :)
PS: Bez objektů se dnes už opravdu nehnu. Fajn je, že máte potom objektový back-end i objektový front-end, tedy nemusíte moc přemýšlet, jestli píšeš v JavaScriptu nebo v PHP. ;)
- na1k
- Člen | 288
Setkal jsem se víceméně s podobným názorem. Dotyčnému jsem doporučil, ať si do svého überframeworku zkusí třeba jen doplnit šablony o Latte (resp. použít Nette šablony) anebo zkusí Laděnku. Po čase zjistil, že Nette komponenty v jeho aplikaci převažují a na Nette přešel úplně.
Podle mě je to o otevřenosti novým věcem. Nemůžu čekat, že se v roce 2011 budou aplikace psát stejně jako v době PHP4. Za sebe můžu říct, že mi Nette opravdu dalo trochu jiný pohled na věc a přinutilo mě zamyslet se nad správným (správnějším) návrhem. A co je důležité – zdaleka ještě v Nette neovládám úplně všechno, ale za pomocí presenterů, komponent a šablon jsem schopný udělat prakticky všechno. Services, Cache a jiné beru jako třešničky na dortu a jistě se k nim jednou dopracuju, ale už teď můžu říct, že ze mě Nette udělalo lepšího programátora.
Pro začátek si stačí vzít jeden malý web a říct si, že ho postavím pouze na Nette, zkusit se oprostit od dosavadního myšlení (svého FW) a nechat se vtáhnout … zbytek přijde sám :)
- stekycz
- Člen | 152
Přemýšlím, jestli za sebe mohu dodat nějaké plus. Rozhodně mě ale
Nette stále dokáže překvapit, přestože jej používám už asi 2 roky.
Když jsem s Nette začínal tak jsem o OOP měl jen velice povrchní
povědomí. Postupem času jsem našel různé best-practise a různé drobné
fuknční záležitosti, které mi v mnohém práci usnadnily. Například až
asi po roce jsem zjistil, jak mohu využívat třídu HttpRequest
.
Do té doby jsem si k mnoha proměným přistupoval sám. A samozřejmě
řešit jakékoli základní ošetření, parsování apod. jsem musel sám. Už
jen díky této třídě mi Nette usnadnilo obrovské množství starostí.
A že podobných tříd bych v Nette našel tak 99% :-)
Každopádně co se ukecanosti týče, zrovna Nette mi připadá ukecané přiměřeně. Mnohokrát je zmiňováno, že by názvy metod/tříd atd. měly být samopopisné. Což mi u Nette velice vyhovuje. Mít méně ukecaný FW, tak se občas možná ztratím.
Jako bonus beru množství rozšíření, která již existují a samozřejmě i další, které si člověk může napsat naprosto dle svého uvážení.
- gee
- Člen | 2
Asi by bylo vhodné, abych upřesnil stav mého frameworku. Od dob PHP 4.x, jsem jej už 3× více či méně přepsal. Nicméně, jsem narazil jisté hranice, které nelze překonat dalším rozvojem, ale jedině napsáním znova (přechod na OOP). Tu největší výhodu, kterou v mém řešení vidím, je právě v jakési formě bindování produkčního kódu (myšleno view) na DB (definuji pouze názvy tabulek, metod[obecné metody] a pořadí[závislostí], ve kterém se mají provést a o nic dalšího se nestarám, framework zařídí zbytek práce [třeba získání ID nového záznamu, jeho distribuce do závislých dat, atd.]).
V současné době neznám moc možností Nette. Pročítám si kód, manuál, diskuze a zjišťuji, co všechno to umí, neumí atd., už jen instalace jen „docela náročná“. Problém není v tom něco se naučit nebo přiučit, jen je otázka, jestli to není víc složité, než by to nezbytně muselo být (ocamovo ostří a 1 zásada z XP v praxi)?
Ve výsledku mi jde o to, vybrat co nejlepší variantu a neztratit týdny něčím, co nakonec nevyužiju. Každopádně díky za věcné komentáře (pořád čekám, jestli DGX nepřidá i svoji trošku do mlýna).
- bojovyletoun
- Člen | 667
Zrovna si myslím, že „instalace“ je v Nette dost jednoduchá. Prostě zkopírovat libs/Nette a už to jede. Znám Frameworky kde se „Hello world či skeleton, či komponenty“ nějak "generuje, třeba Praso. Sice to nemusí být vždyna škodu, viz scaffold. Ale třeba styl HubyOnRails se mi nelíbí(jazyk jo).
Napsání prvního příkladu urychlí skeleton(sandbox). Stačí
CtrlCCtrlV.
Dokonce i bez použití skeletonu je to dost rychlé(já mám v index.php
jediný příkaz- require boosttrap). Tam stačí jen definovat
4 konstanty,zapnout Router,Debug a spustit aplikaci. Pak stačí jen vytvořit
pár dirů-temp,cache,log,presenters,templates.
- stekycz
- Člen | 152
gee napsal(a):
Tu největší výhodu, kterou v mém řešení vidím, je právě v jakési formě bindování produkčního kódu (myšleno view) na DB (definuji pouze názvy tabulek, metod[obecné metody] a pořadí[závislostí], ve kterém se mají provést a o nic dalšího se nestarám, framework zařídí zbytek práce [třeba získání ID nového záznamu, jeho distribuce do závislých dat, atd.]).
Podle tohoto soudím, že jediné, co si řešíš, je namapování databáze
na model aplikace a zbytek už se nějak vytvoří. Konkrétně nějaké
best-practice a třídy pro zjednodušení tvorby modelové vrstvy se
v poslední době (alespoň pokud vím) řeší. Základem je již hotové
\Nette\Database
.
Nette mi vlastně nechává jakousi volnost v tom, jak výsledek bude
vypadat – od modelu po prezentaci. Z tvého popisu mám skoro pocit, že
máš jedno view, které se nějakým způsobem renderuje – např.
ENUM
bude vždy SelectBox, TEXT
v databázi bude
TextArea apod. Ve většině případů to tak asi bude, dle vhodně
vytvořeného modelu to bude i v 90% to co člověk chce, ale stále v 10%
budu chtít něco jiného a musím to zase obcházet.
Sám mám nějaké návyky a po napsání prvního webu v Nette mám část
kódů, kterou stejně používám vždy. Nette mi usnadnilo tvorbu opravdu
těch velkých základů a postupně mi zjednodušuje čím dál tím více
činností. Sám jsem i přemýšlel, že by bylo možné vytvořit
modul/rozšíření, které by generovalo nějakou standardní administraci –
podoně jako Djangu. Jakmile si tohle člověk doplní, tak má k Nette
vlastní modul, který si napsal dle svého, ale už není třeba řešit
nízkoúrovňové záležitosti (použít $_GET
nebo
$_POST
nebo $_REQUEST
?).
bojovyletoun napsal(a):
Napsání prvního příkladu urychlí skeleton(sandbox). Stačí CtrlCCtrlV.
Dokonce i bez použití skeletonu je to dost rychlé(já mám v index.php jediný příkaz- require boosttrap). Tam stačí jen definovat 4 konstanty,zapnout Router,Debug a spustit aplikaci. Pak stačí jen vytvořit pár dirů-temp,cache,log,presenters,templates.
K tomuto jen krátce, jak už jsem napsal výše – člověk jedou zkopíruje, jednou vytvoří a použije pak už dál. S případnými novinkami upraví.
Editoval Gruw (30. 1. 2011 19:45)
- dakota
- Člen | 148
Všetko má svoje výhody aj nevýhody. Veľkou výhodou vlastného frameworku je, že ho poznáš a môžeš si ho prispôsobiť ako chceš, hodí sa skôr na špecifické aplikácie. Výhody cudzieho framewoku však prevládajú.
Výhoda cudzieho frameworku:
- veľa vecí za teba rieši framework – týka sa to hlavne často sa opakujúcich vecí
- pozná ho širší okruh ľudí – ak sa aplikácii začne venovať niekto druhý nemusí sa učiť tvoj vlastný framewok ale može sa rovno venovať aplikácii
- pokrytie bezpečnostných rizík – asi najdôležitejšia vec – pri vývoji vlastného frameworku môžeš nejaké riziko prehliadnuť
- bugy a nedostatky frameworku sa postupne odstraňujú aj vďaka širokej komunite
- šablony
- atď
Vlastný framework, Zend a teraz Nette som vyskúšal aj ja. A som rád, že som prešiel na Nette. Čo sa týka zložitosti frameworku – stačí si porovnať Zend a Nette, Nette je v tomto smere jednoznačne lepšie, a že sa riešia veci ktoré nevyužiješ, tak ich nepoužívaj a použí svoje.
Vlastný framework ak ho nechceš poskytovať ako open source alebo predávať je strata času.
Editoval dakota (30. 1. 2011 20:07)
- h4kuna
- Backer | 740
gee napsal(a):
Nette, proč tak složitě? Nebo se to jen zdá?
Celá komunita tady na fóru bude pro Nette, dokud jen budeš mluvit a nic nepředvedeš. Celý tehle topic je fuj a o ničem, dokud nebude něco o co se opřít… A nedivím se Davidovi že by se nechtěl tímhle zabývat.
Editoval matata (30. 1. 2011 20:54)