История на Nette

Началото на Nette датира от 2004 г., когато неговият автор Давид Грудл започва да търси подходящ framework, в който да може да пише приложения, тъй като чистият PHP вече не е достатъчен за това. Нито едно от тогавашните налични решения не му допада, така че постепенно започва да очертава характеристиките на нов framework, който по-късно получава името Nette.

По това време все още не съществуват съвременните framework-ове като Symfony, Laravel или Ruby on Rails. В света на Java стандартът е framework JSF (JavaServer Faces), а в конкурентния .NET – ASP.NET Webforms. И двата позволяват изграждането на страници с помощта на повторно използваеми UI компоненти. Техните начини на абстракция и опити да се създаде състояние над безсъстоянийния протокол HTTP с помощта на сесия или т.нар. postback Давид счита за погрешни и фундаментално нефункционални. Те причиняват редица трудности както на потребителите, така и на търсачките. Например, ако сте запазили линк, по-късно с изненада сте намирали под него различно съдържание.

Самата възможност за съставяне на страници от повторно използваеми UI компоненти очарова Давид, той я познава добре от Delphi, тогава популярен инструмент за създаване на десктоп приложения. Харесват му пазарите с opensource компоненти за Delphi. Затова се опитва да реши въпроса как да създаде компонентен framework, който, напротив, да работи в пълно съответствие с безсъстоянийния HTTP. Търси концепция, която да бъде приятелска за потребителите, SEO и разработчиците. И така започва да се ражда Nette.

Името Nette възниква случайно в банята, когато авторът забелязва опаковка с гел за бръснене Gillette, обърната така, че се вижда само llette.

Следват хиляди часове изследвания, размишления и пренаписвания. В прашен гараж в село някъде зад Бърно възникват първите очертания на бъдещия framework. Основата на архитектурата става моделът MVC, който тогава използва днес вече забравен PHP framework Mojavi и по-късно е популяризиран благодарение на шума около Ruby on Rails. Един от източниците на вдъхновение е дори никога непубликуваният framework phpBase на Хонза Тихи.

В блога на автора започват да излизат статии за предстоящия Nette. Шегува се, че става въпрос за vaporware. Но след това през октомври 2007 г. на пражката конференция PHP Seminář Давид публично представя Nette. Между другото, от тази конференция година по-късно се развива WebExpo, по-късно една от най-големите IT конференции в Европа. Още тогава Nette се похвали с редица оригинални концепции, като споменатия компонентен модел, двупосочен рутер, специфичен начин на препращане между презентери и т.н. Имаше форми, решена автентикация, кеширане и т.н. Всичко това се използва в Nette в оригиналната си концепция и до днес.

В Nette вместо термина controller се използва presenter, защото в кода уж имало твърде много думи, започващи с con (controller, front controller, control, config, container, …)

В края на 2007 г. Давид Грудл публикува и кода и така светът вижда версия Nette 0.7. Framework-ът веднага привлича огромно внимание. Около него се формира ентусиазирана общност от програмисти, която започва да се събира всеки месец на събитието Posobota. В общността има редица днешни личности, например Ондржей Миртес, автор на страхотния инструмент PHPStan. Развитието на Nette напредва бързо и през следващите две години излизат версии 0.8 и 0.9, където са положени основите на почти всички днешни части на framework-а. Включително AJAX снипетите, които с 14 години изпреварват Hotwire за Ruby on Rails или Symfony UX Turbo.

Едно основно нещо обаче липсва в тогавашния Nette. Dependecy injection container (DIC). Nette използва т.нар. service locator и намерението е да се премине именно към dependency injection. Но как да се проектира такова нещо? Давид Грудл, който тогава няма опит с DI, отива на обяд с Вашек Пурхарт, който използва DI от около половин година. Заедно обсъждат темата и Давид започва работа по Nette DI, библиотека, която напълно преобръща начина, по който се мисли за дизайна на приложенията. DI контейнерът става една от най-успешните части на framework-а. И по-късно дава началото и на два spin-off-а: формата Neon и библиотеката Schema.

Преходът към dependency injection отнема доста време и за новата версия на Nette се чака няколко години. Затова, когато най-накрая излиза, носи направо номер 2. Версия Nette 1 следователно не съществува.

Nette през 2012 г. с версия 2.0 стартира своята модерна история. Донесе и Nette Database, чиято част беше и необикновено удобен инструмент за работа с база данни, днес наричан Explorer. Тази библиотека първоначално е програмирана от Якуб Врана, съсед на Давид Грудл и автор на популярния инструмент Adminer. След това нейното по-нататъшно развитие за три години поема Ян Шкрашек.

През 2014 г. излиза Nette 2.1, последвана скоро от Nette 2.2. Как е възможно това? Версия 2.2 е същата като версия 2.1, само че разделена на двадесет самостоятелни пакета. В света на PHP се установява инструментът Composer и променя начина, по който се възприема създаването на библиотеки. Така Nette престава да бъде монолит и се разпада на по-малки независими части. Всяка със свое хранилище, issue tracker и собствен темп на развитие и версиониране. В Nette така не се налага да се стига до абсурди, обичайни в монолитните framework-ове, когато излиза нова версия на пакет, въпреки че в него изобщо нищо не се е променило. Самото разделяне на Git хранилищата отнема няколко седмици подготовка и стотици часове машинно време.

Nette също така се класира на удивителното 3-то място в световна анкета за най-добър PHP framework, организирана от списание Sitepoint.