История Nette
Истоки Nette берут начало в 2004 году, когда его автор Дэвид Грудл начал искать подходящий фреймворк для написания приложений, поскольку чистого PHP было уже недостаточно. Ни одно из доступных на тот момент решений его не устраивало, поэтому он постепенно начал набрасывать черты нового фреймворка, который впоследствии получил название Nette.
В то время таких современных фреймворков, как Symfony, Laravel или Ruby on Rails, еще не существовало. В мире Java стандартом был JSF (JavaServer Faces), а в конкурирующем мире .NET стандартом был ASP.NET Webforms. Оба они позволяли создавать страницы с использованием многократно используемых компонентов пользовательского интерфейса. Дэвид считал их методы абстракции и попытки создать безгражданственность по безгражданскому протоколу HTTP с помощью сессий или постбеков несовершенными и принципиально неработающими. Они создавали множество трудностей для пользователей и поисковых систем. Например, если вы сохранили ссылку, то с удивлением обнаружили под ней позже другой контент.
Сама возможность составления страниц из многократно используемых компонентов пользовательского интерфейса завораживала Дэвида, и он хорошо знал ее по Delphi, популярному в то время средству разработки настольных приложений. Ему понравились торговые площадки с компонентами с открытым исходным кодом для Delphi. Поэтому он попытался решить вопрос о том, как создать компонентный фреймворк, который, в свою очередь, работал бы в полной гармонии с stateless HTTP. Он искал концепцию, которая была бы удобна для пользователей, SEO и разработчиков. Так родилась Nette.
Имя Nette появилось случайно в ванной комнате, когда автор заметила контейнер с гелем для бритья Gillette, повернутый так, что была видна только llette.
Затем последовали тысячи часов исследований, размышлений и переписывания. В пыльном гараже в деревне где-то за пределами Брно были созданы первые очертания будущего каркаса. В основе архитектуры лежал паттерн MVC, который затем использовался в забытом ныне PHP-фреймворке Mojavi, а позже был популяризирован шумихой вокруг Ruby on Rails. Одним из источников вдохновения стал так и не опубликованный фреймворк phpBase Хонзы Тихи.
В блоге автора начали появляться статьи о предстоящем выходе “Nette”. Шутили, что речь идет о паровой продукции. Но затем в октябре 2007 года, на конференции Prague PHP Seminar, Дэвид публично представил Nette. Кстати, через год эта конференция превратилась в WebExpo, которая впоследствии стала одной из крупнейших ИТ-конференций в Европе. Уже тогда Nette мог похвастаться рядом оригинальных концепций, таких как вышеупомянутая компонентная модель, двунаправленный маршрутизатор, особый способ связи между ведущими и т.д. В нем были формы, аутентификация, кэширование и т.д. Все и сегодня используется в Nette в своей первоначальной концепции.
Nette использует presenter вместо controller, потому что в коде якобы было слишком много слов, начинающихся с 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 не хватало одной важной вещи. Контейнер для инъекции зависимостей (DIC). Nette использовала сервисный локатор, и было намерение перейти на dependecy injection. Но как спроектировать такую вещь? Дэвид Грудл, который в то время не имел опыта работы с DI, пошел на обед с Вашеком Перчартом, который использовал DI около полугода. Вместе они обсудили эту тему, и Дэвид начал работу над Nette DI, библиотекой, которая полностью изменила наше представление о дизайне приложений. Контейнер DI стал одной из самых успешных частей фреймворка. Это привело к появлению двух побочных продуктов: формата Neon и библиотеки Schema.
Переход на внедрение зависимостей занял много времени, и новая версия Nette готовилась несколько лет. Вот почему, когда он наконец вышел, он был пронумерован как 2. Таким образом, Nette версии 1 не существует.
Свою современную историю Nette начала в 2012 году с версии 2.0. Она также принесла Nette Database, которая включала чрезвычайно удобный инструмент для работы с базами данных, который теперь называется Explorer. Эта библиотека была первоначально запрограммирована Якубом Враной, соседом Дэвида Груделя и автором популярного инструмента Adminer. Дальнейшим развитием компании в течение трех лет занимался Ян Шкрашек.
В 2014 году была выпущена версия Nette 2.1, за которой вскоре последовала версия Nette 2.2. Версия 2.2 была такой же, как и версия 2.1, только разбита на двадцать отдельных пакетов. Инструмент Composer прижился в мире PHP и изменил наше представление о создании библиотек. Nette перестала быть монолитом и распалась на мелкие независимые части. Каждый из них имеет свой собственный репозиторий, трекер проблем и свой собственный темп разработки и версионирования. Таким образом, Nette не нужно проходить через абсурды, характерные для монолитных фреймворков, когда выходит новая версия пакета, хотя ничего не изменилось. Фактическое разделение репозиториев Git потребовало нескольких недель подготовки и сотен часов машинного времени.
Nette также занял удивительное 3-е место в глобальном опросе на лучший PHP-фреймворк, организованном журналом Sitepoint.