A Nette története
A Nette keletkezésének kezdete 2004-re nyúlik vissza, amikor szerzője, David Grudl elkezdett keresni egy megfelelő keretrendszert, amelyben alkalmazásokat írhatott volna, mivel a tiszta PHP ehhez már nem volt elegendő. Egyik akkori elérhető megoldás sem felelt meg neki, így fokozatosan elkezdte felvázolni egy új keretrendszer körvonalait, amely később a Nette nevet kapta.
Abban az időben még nem léteztek a mai keretrendszerek, mint a Symfony, a Laravel vagy akár a Ruby on Rails. A Java világában a JSF (JavaServer Faces) keretrendszer volt a standard, a konkurens .NET-ben pedig az ASP.NET Webforms. Mindkettő lehetővé tette az oldalak újrafelhasználható UI komponensek segítségével történő építését. Az absztrakciós módszereiket és az állapotosság létrehozására tett kísérleteiket az állapot nélküli HTTP protokoll felett session vagy ún. postback segítségével David hibásnak és alapvetően működésképtelennek tartotta. Számos nehézséget okoztak a felhasználóknak és a keresőmotoroknak is. Például, ha elmentett egy linket, később meglepődve más tartalmat talált alatta.
Maga az oldalak újrafelhasználható UI komponensekből való összeállításának lehetősége lenyűgözte Davidot, jól ismerte a Delphiből, amely akkoriban népszerű eszköz volt az asztali alkalmazások készítéséhez. Tetszettek neki a Delphihez készült nyílt forráskódú komponensek piacterei. Ezért megpróbálta megoldani azt a kérdést, hogyan lehet létrehozni egy olyan komponens keretrendszert, amely viszont tökéletes összhangban működik az állapot nélküli HTTP-vel. Olyan koncepciót keresett, amely barátságos a felhasználók, a SEO és a fejlesztők számára. És így kezdett megszületni a Nette.
A Nette név véletlenül született a fürdőszobában, amikor a szerző meglátott egy Gillette borotvahabos flakont, úgy elfordítva, hogy csak a llette volt látható.
Ezt több ezer óra kutatás, gondolkodás és átírás követte. Egy poros garázsban, egy Brnón túli faluban születtek meg a jövőbeli keretrendszer első körvonalai. Az architektúra alapja az MVC minta lett, amelyet akkoriban a mára már elfeledett Mojavi PHP keretrendszer használt, és később a Ruby on Rails körüli felhajtásnak köszönhetően vált népszerűvé. Az egyik inspirációs forrás még Honza Tichý soha nem publikált phpBase keretrendszere is volt.
A szerző blogján cikkek kezdtek megjelenni a készülő Nette-ről. Viccelődtek, hogy ez vaporware. Aztán 2007 októberében a prágai PHP Seminář konferencián David nyilvánosan bemutatta a Nette-t. Mellesleg, ebből a konferenciából egy évvel később fejlődött ki a WebExpo, később Európa egyik legnagyobb IT konferenciája. Már akkor is a Nette számos eredeti koncepcióval büszkélkedhetett, mint az említett komponens modell, a kétirányú router, a presenterek közötti specifikus hivatkozási mód stb. Voltak űrlapjai, megoldott hitelesítése, gyorsítótárazása stb. Mindent a Nette-ben az eredeti felfogás szerint használnak a mai napig.
A Nette-ben a controller helyett a presenter kifejezést használják, mert állítólag túl sok con-nal kezdődő szó volt a kódban (controller, front controller, control, config, container, …)
2007 végén David Grudl közzétette a kódot is, és így napvilágot látott a Nette 0.7 verziója. A keretrendszer azonnal óriási figyelmet keltett. Lelkes programozói közösség alakult ki körülötte, amely minden hónapban elkezdett találkozni a Posobota nevű eseményen. A közösségben számos mai személyiség volt, például Ondřej Mirtes, a nagyszerű PHPStan eszköz szerzője. A Nette fejlesztése előrehaladt, és a következő két évben megjelent a 0.8 és 0.9 verzió, ahol lefektették a keretrendszer szinte minden mai részének alapjait. Beleértve az AJAX snippetteket, amelyek 14 évvel megelőzték a Hotwire-t a Ruby on Railshez vagy a Symfony UX Turbo-t.
Egy alapvető dolog azonban hiányzott az akkori Nette-ből. A Dependecy injection container (DIC). A Nette ún. service locator-t használt, és a szándék az volt, hogy áttérjenek a dependency injectionre. De hogyan tervezzenek meg egy ilyen dolgot? David Grudl, akinek akkoriban nem volt tapasztalata a DI-vel, elment ebédelni Vašek Purcharttal, aki körülbelül fél éve használta a DI-t. Közösen megvitatták a témát, és David megkezdte a munkát a Nette DI-n, egy könyvtáron, amely teljesen megváltoztatta az alkalmazástervezésről való gondolkodás módját. A DI konténer a keretrendszer egyik legsikeresebb részévé vált. És később két spin-offot is eredményezett: a Neon formátumot és a Schema könyvtárat.
A dependency injectionre való áttérés sok időt igényelt, és az új Nette verzióra pár évet kellett várni. Ezért, amikor végre megjelent, rögtön a 2-es számot viselte. Tehát a Nette 1-es verzió nem létezik.
A Nette 2012-ben a 2.0-s verzióval indította el modern történetét. Elhozta a Nette Database-t is, amelynek része volt egy rendkívül ügyes eszköz az adatbázissal való munkához, ma Explorer néven ismert. Ezt a könyvtárat eredetileg Jakub Vrána programozta, David Grudl szomszédja és a népszerű Adminer eszköz szerzője. További fejlesztését ezután három évig Jan Škrášek vette át.
2014-ben jelent meg a Nette 2.1, amelyet rövid időn belül követett a Nette 2.2. Hogyan lehetséges ez? A 2.2-es verzió ugyanaz volt, mint a 2.1-es, csak húsz különálló csomagra osztva. A PHP világában elterjedt a Composer eszköz, és megváltoztatta a könyvtárak létrehozásának módját. A Nette így megszűnt monolit lenni, és kisebb, független részekre bomlott. Mindegyik saját repozitóriummal, issue trackerrel és saját fejlesztési ütemmel és verziózással. Így a Nette-ben nem kell olyan abszurditásoknak előfordulniuk, amelyek a monolitikus keretrendszerekben gyakoriak, amikor egy csomag új verziója jelenik meg, annak ellenére, hogy semmi sem változott benne. Maga a Git repozitóriumok szétválasztása több hét előkészületet és több száz óra gépidőt igényelt.
A Nette emellett lenyűgöző 3. helyezést ért el a Sitepoint magazin által rendezett világméretű PHP keretrendszer szavazáson.