Вы когда-нибудь слышали об Angular? Реагировать? Эмбер? Метеор? Выражать? Что объединяет все эти слова?

Если в вашем ответе были такие слова, как «JavaScript», «framework» и «MVC», вы уже неплохо начали. Каждая из этих JS-библиотек предоставляет разработчикам набор инструментов для создания среды MVC (более или менее, если посмотреть на React). И нет, MV* не было опечаткой, и да, мы доберемся до этого.

Например, Meteor — это полноценный фреймворк, целью которого является создание проектов исключительно на JS. Он фактически каннибализирует Node в процессе, так что это полностью автономный проект. Однако он довольно гибкий, и его части можно легко заменить; например, требуется ровно одна короткая команда CLI, чтобы заменить встроенную платформу Meteor Views, Blaze, на Angular.

$ метеор добавить urigo:angular

Говоря об Angular (также Aurelia), это стандарты фреймворков MVC JS. Это чистые интерфейсные библиотеки, без единой строки кода для выполнения на стороне сервера. Angular явно является доминирующим вариантом — как вы увидите ниже, он в значительной степени управлял рынком с тех пор, как ASP.NET потерял популярность и только сейчас замедляется из-за конкуренции со стороны других JS-фреймворков.

А еще есть React, где в тени остаются лишь последние остатки идеализма MVC. React создает виртуальный DOM для повторного рендеринга всех представлений с оптимальной скоростью, вместо того, чтобы иметь здоровенные контроллеры и повторно отображать только обработанные представления. Созданный Facebook, цель состоит в том, чтобы быть невероятно удобным и иметь молниеносные визуальные эффекты. Он не имеет внутренних возможностей и на самом деле не следует структуре MVC в той степени, в которой это делают другие, упомянутые здесь, поскольку он повторно отображает каждое представление каждый раз, когда он повторно отображает любое представление, и поэтому контроллерам не нужно обрабатывать это (что составляет большую часть их цели).

Основываясь на поисковых запросах пользователей, мы можем получить некоторое представление о сравнительной популярности. Интересно, что, если не считать массового всплеска Django в 2012 году благодаря известному разработчику Квентину Тарантино, тенденции были на удивление устойчивыми, особенно с учетом того, насколько индустрия печально известна своей непостоянностью.

Тем не менее, я думаю, что этот график действительно демонстрирует то, что с популяризацией Node и, следовательно, полной интеграцией JavaScript в серверную часть мы впервые видим два JS-фреймворка в верхней части трендов — React съел занимает большую долю рынка, когда-то принадлежавшую ASP.NET или Rails. Между тем, Angular плывет, доминируя над всеми, хотя недовольство массовыми изменениями Angular 2 приводит к трудностям.

Так как именно это работает? Итак, традиционный подход (впервые придуманный, как и многие технологии, которые мы используем сегодня, исследовательским центром Xerox в Пало-Альто в 1970-х годах) известен как шаблон проектирования Model View Controller, также называемый MVC. Модель хранит данные, Представление представляет данные пользователю и разрешает ввод, а Контроллер сопоставляет ввод пользователя с соответствующими действиями, изменяя как Представление, так и Модель по мере необходимости.

Здесь необходим быстрый обход, поскольку, в частности, в JS-библиотеках MVC известен как MV* (Model View Wildcard), поскольку структура приложения может не поощрять наличие контроллера; MVC является подмножеством MV*. Приведенная выше диаграмма называется MVVM или Model-View-View Model.

Angular, вероятно, является окончательным фреймворком MVC JS. Аурелия и Эмбер придерживаются того же мнения, хотя и менее популярны. Все они, по сути, делают одно и то же: у них есть представления (HTML-страницы), модели (данные JS, хранящиеся в объектах) и контроллеры (объекты-контроллеры, которые отслеживают ввод пользователя и инициируют соответствующие обновления моделей и представлений). Я ожидаю сделать свой следующий пост в блоге о полном проекте Angular, который в настоящее время находится в стадии разработки.

Стоит отметить, что это даже не малая часть того, что предлагают эти различные фреймворки. Особенно за последние пару лет фронтенд-разработка сделала скачок вперед, чтобы стать быстрее, легче и эффективнее, а с ростом популярности приложений Node и полного стека приложений JavaScript нет никаких признаков замедления. Я оставлю вас с этим изображением, полным стеком JavaScript.