История Nette

Истоки Nette уходят в 2004 год, когда её автор Давид Грудл начал искать подходящий фреймворк для написания приложений, потому что чистого PHP ему уже не хватало. Ни одно из доступных тогда решений его потребностям не отвечало, поэтому он постепенно начал набрасывать черты нового фреймворка, который позже получил имя Nette.

В то время современных фреймворков вроде Symfony, Laravel или Ruby on Rails ещё не существовало. В мире Java стандартом был JSF (JavaServer Faces), а в конкурирующем мире .NET господствовал ASP.NET WebForms. Оба позволяли строить страницы из многократно используемых UI-компонентов. Однако их способ абстракции и попытки имитировать состояние поверх не хранящего состояния протокола HTTP с помощью сессий или так называемых postback Давид считал ошибочными и в основе своей сломанными. Они вызывали множество трудностей у пользователей и поисковых систем. Например, если вы сохраняли ссылку, то позже могли с удивлением обнаружить под ней совсем другое содержимое.

Сама идея составлять страницы из многократно используемых UI-компонентов Давида увлекала: он знал её по Delphi, популярному тогда инструменту для создания настольных приложений. Ему нравились площадки, предлагающие открытые компоненты для Delphi. Поэтому он искал ответ на вопрос: как создать компонентный фреймворк, который работал бы в полной гармонии с не хранящим состояния HTTP? Он искал концепцию, дружелюбную и к пользователям, и к SEO, и к разработчикам. Так начала складываться Nette.

Название Nette возникло случайно в ванной, когда автор заметил баллончик геля для бритья Gillette, повёрнутый так, что было видно только llette.

Дальше были тысячи часов исследований, размышлений и переписывания. В пыльном гараже в деревне где-то под Брно возникли первые очертания будущего фреймворка. Архитектурной основой стал шаблон MVC (Model-View-Controller), который тогда использовал ныне забытый PHP-фреймворк Mojavi и который позже прославила шумиха вокруг Ruby on Rails. Одним из источников вдохновения был даже так и не вышедший фреймворк phpBase Гонзы Тихого.

Всемирная штаб-квартира Nette, 2005

В блоге автора начали появляться статьи о готовящейся Nette. Шутили, что это vaporware. Но затем, в октябре 2007 года, на конференции PHP Seminar в Праге Давид публично представил Nette. К слову, эта конференция через год выросла в WebExpo, ставшую одной из крупнейших IT-конференций в Европе. Уже тогда Nette могла похвастаться несколькими оригинальными концепциями: упомянутой компонентной моделью, двунаправленным маршрутизатором, особым способом создания ссылок между презентерами и т. д. В ней были формы, была решена аутентификация, кеширование и многое другое. Все эти основные концепции используются в Nette в исходном виде и сегодня.

В Nette вместо термина controller используется presenter – якобы потому, что в коде было слишком много слов, начинающихся на con (controller, front controller, control, config, container, …).

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

Однако одного важного элемента в ранней Nette не хватало: контейнера внедрения зависимостей (DIC). Nette использовала service locator, и в планах был переход на внедрение зависимостей. Но как спроектировать такую вещь? Давид Грудл, у которого тогда не было опыта с DI, пообедал с Вацлавом Пурхартом, который использовал DI уже около полугода. Они обсудили тему, и Давид начал работать над Nette DI, библиотекой, которая полностью перевернула подход к проектированию приложений. DI-контейнер стал одной из самых удачных частей фреймворка и позже породил два ответвления: формат NEON и библиотеку Schema.

Переход на внедрение зависимостей занял немало времени, и сообщество ждало новой версии Nette несколько лет. Поэтому, когда она наконец вышла, ей сразу присвоили номер 2.0. Так что версии Nette 1 не существует.

Современная эпоха Nette началась в 2012 году с версии 2.0. Тогда же появилась и Nette Database, включавшая исключительно удобный инструмент для работы с базами данных, известный сегодня как Explorer. Изначально эту библиотеку запрограммировал Якуб Врана, сосед Давида Грудла и автор популярного инструмента Adminer. Затем её развитие на три года взял на себя Ян Шкрашек.

В 2014 году вышла Nette 2.1, а вскоре после неё Nette 2.2. Как такое возможно? Версия 2.2 была по сути той же, что и 2.1, но разделённой на двадцать отдельных пакетов. В мире PHP утвердился инструмент Composer, изменивший подход к библиотекам. Nette перестала быть монолитом и распалась на меньшие независимые части, у каждой из которых свой репозиторий, свой трекер задач, свой темп развития и своя нумерация версий. Это избавляет от нелепостей, обычных для монолитных фреймворков, где новая версия пакета может выйти, даже если внутри него ничего не изменилось. Само разделение git-репозиториев потребовало нескольких недель подготовки и сотен часов машинного времени.

Nette добилась и впечатляющего 3-го места в мировом опросе о лучшем PHP-фреймворке, который проводил журнал SitePoint.