Strach o budoucí vývoj Nette
- Ondřej Mirtes
- Člen | 1536
Současné řádění se zpětnou nekompatibilitou ve mě vyvolává strach o můj oblíbený framework. Bojím se, že to Nette zabije.
S tím, jak se objevila verze 2 a řeklo se, že můžeme zpětnou kompatibilitu hodit za hlavu, se vynořila spousta zbytečných změn. Sám jsem v posledních dnech převáděl náš firemní kód, který byl kompatibilní se srpnovou verzí, na současnou, a byla to fuška a úpravy rozprostřené všude po kódu. Samozřejmě, můžeme zůstat na staré verzi a novou použít až pro nové projekty, ale nová verze obsahuje featury a bugfixy, které rádi využijeme všude.
Vzpomínám si, jak se dříve řešily tyto změny – při přejmenování metody byla ještě dlouho k dispozici ta původní, případně pomalu a plíživě začala hlásit deprecated warning, který šel vypnout. I jednoduché změny, které si v aspoň trochu slušně napsané aplikaci vyžádaly změnu na jednom místě, byly prováděny opatrně a s rozmyslem.
Jasně, změny je potřeba dělat, ale neuškodilo by, pokud by byly po
nějaký čas zpětně kompatibilní. Skutečně nevím, proč
$presenter->terminate() musí vyvolávat trigger_error
a
buzerovat tak programátora, aby prošel celou svojí aplikaci a všechny
výskyty přepsal na sendResponse(). Přitom zpětná kompatibilita by nikomu
neuškodila.
Dříve jsem všechny změny stíhal a byl jsem schopen tazateli okamžitě poradit, co s danou chybou způsobenou updatem dělat. Současné tempo je tak zběsilé, že ani já, který mám v RSS repozitář Nette, jsem nebyl schopný se ve změnách orientovat. Natož někdo, kdo vývoj sleduje jen okrajově, nebo je „pouhý“ uživatel frameworku a nepřispívá (ať už radami nebo dotazy) na fóru.
Tím nechci nikoho kárat, jen jsem chtěl napsat, čeho jsem si všimnul a čemu je možná potřeba učinit přítrž. S blížící se Symfony 2, její podobností (při webexpo přednášce jsem měl pocit, že se dívám jen na trochu ukecanější Nette) a vyspělostí v některých ohledech (testování controllerů, dependency injection) je potřeba si fakt dát pozor, abychom Nette nepotopili.
P. S.: Ano, opravdu tenhle post píše ten, který navrhoval zrušení properties ;)
- sodae
- Nette Evangelist | 250
Ondřeji, z části s tebou souhlasím.
Můj postoj k problému:
Když jsem v Nette začínal, bylo malé, chytré a dobře se s ním vyšlo po updatu. Nyní pociťuji takové náznaky, že Davidovi se zalíbila myšlenka, jak se vyvíjí Symfony 2, či Doctrine 2 (velké rozdíly od předchozí verze [1]). Chápu, že Nette je živý framework, mění se. Otázka je, k lepšímu, či k horšímu. Mění se takovým tempem, že už vytváříme „druhý“ framework.
Implementujeme nové vlastnosti do Nette 2, či jej zevnitř měníme, ale neuvědomujeme si, že Nette bylo postaveno také s vlastností zpětné kompatibility.
Podstatě není už co řešit. Nette 2 má být opravdu odlišné od „nulky“, můžeme Nette 2 brát jako „druhý“ framework (ve stylu Symfony/Doctrine 1 vs 2), a musíme přijmout to, že Nette 2 není až takové Nette (0), ale je opravdu jiné. Přeci jen, když už se začalo, tak se to dokončí.
--Budu rád a určitě mnoho lidí to ocení, že až vyjde Nette 2 „final“, půjde to zase ve šlépějích Nette „nula“, pěkně pomaličku s BC.--
- David Grudl
- Nette Core | 8227
Pokud to lze, držím v maximální míře zpětnou kompatibilitu, navzdory
všeobecnému nadšení, že by tomu tak být nemuselo. Držím ji třeba
i tím, že $presenter->terminate()
upozorní na změnu
chování této funkce a přitom vyvolá funkčnost původní. Nevím, jak lépe
by to šlo dělat.
Když zmiňuješ Symfony – tam došlo k totálnímu řezu bez zachování jakékoliv kompatibility. V případě Nette je naopak běžné, že migrace projektu z 0.9 pro PHP 5.2 na 2.0 pro PHP 5.3 si vyžádá minimum úprav. Nesrovnatelné.
Takže se bavme konkrétně, na jaké komplikace při převodu jsi narazil, skutečně mě to zajímá a velmi rád bych tyto zkušenosti buď promítl do frameworku, ještě lépe dostal do stránky o migraci. Nechceš si ji vzít pod palec? (narovinu: sám ji psát fakt nebudu)
- David Grudl
- Nette Core | 8227
sodae napsal(a):
…Nyní pociťuji takové náznaky, že Davidovi se zalíbila myšlenka, jak se vyvíjí Symfony 2, či Doctrine 2
No tak to ani náhodou.
- Patrik Votoček
- Člen | 2221
já takový problém nepozoruju (i když bych měl protože jedu v
Nette\Debug::$strictMode = TRUE;
– trigger_error
==
ladenka). Ono je to možná tím že si neuvědomuješ nebo možná uvědomuješ
ale i tak se ti to nezdá. Ale používáme živou verzi Nette takže s tím že se sem tam někde
mění API musíme počítat. (nicméně i tak nepozoruji to co ty tu
popisuješ – možná proto protože Nette aktualizuju každý týden).