История Nette

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

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

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

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

Последовали тысячи часов исследований, размышлений и переписываний. В пыльном гараже в деревне где-то под Брно возникали первые очертания будущего фреймворка. Основой архитектуры стал паттерн MVC, который тогда использовал уже забытый PHP-фреймворк Mojavi и позже был популяризирован благодаря шумихе вокруг Ruby on Rails. Одним из источников вдохновения был даже никогда не опубликованный фреймворк 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. Фреймворк сразу же привлек к себе огромное внимание. Вокруг него сформировалось восторженное сообщество программистов, которое начало каждый месяц встречаться на мероприятии Posobota. В сообществе было много сегодняшних знаменитостей, например, Ондржей Миртес, автор замечательного инструмента PHPStan. Разработка Nette шла вперед, и в следующие два года вышли версии 0.8 и 0.9, где были заложены основы почти всех сегодняшних частей фреймворка. Включая AJAX-сниппеты, которые на 14 лет опередили Hotwire для Ruby on Rails или Symfony UX Turbo.

Но одна важная вещь в тогдашнем Nette отсутствовала. Dependecy injection container (DIC). Nette использовало так называемый service locator, и намерение было перейти именно на dependecy injection. Но как спроектировать такую вещь? Давид Грудл, у которого тогда не было опыта с DI, пошел на обед с Вашеком Пурхартом, который использовал DI около полугода. Они вместе обсудили тему, и Давид начал работу над Nette DI, библиотекой, которая полностью перевернула способ мышления о проектировании приложений. DI-контейнер стал одной из самых удачных частей фреймворка. И позже породил два спин-оффа: формат 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 перестало быть монолитом и распалось на меньшие независимые части. Каждая со своим репозиторием, трекером проблем и собственным темпом разработки и версионирования. В Nette, таким образом, не должно возникать абсурдов, обычных в монолитных фреймворках, когда выходит новая версия пакета, хотя в нем вообще ничего не изменилось. Само разделение Git-репозиториев потребовало нескольких недель подготовки и сотен часов машинного времени.

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