Programming
January 4, 2022

Почему я выбрал Angular и не собираюсь от него отказываться

Всем привет!

Выдалось несколько свободных дней, и я решил немного порассуждать на очень субъективную тему. А конкретно – почему я выбрал фреймворк Angular, а не, например, React или Vuejs. На самом деле, изначально не было планов работать именно с ним. Но так получилось, что меня занесло на проект, в котором активно используется его предшественник Angular.js. Я искренне возненавидел эту поделку.

Я понимаю, что этот фреймворк, по сути, первый успешный продукт такого типа и в нем было допущено большое количество ошибок. Ведь многие практики еще не существовали и не было известно, что хорошо работает, а что нет. Также он был написан на старом стандарте JavaScript ES5. Это превращало исходный код в нечитаемый бред. Другим минусом было неочевидное поведение, помноженное на трудности отладки кода. Библиотека React от Facebook в то время только появилась и была достаточно сырой и трудной в использовании. Vuejs тогда даже не был в проекте.

Интересный факт: развитие Angular.js однажды зашло в тупик и его создатели приступили к разработке фреймворка нового поколения, который назвали просто Angular (без js). И действительно, JavaScript там не было, так как в качестве языка разработки выступал его диалект – TypeScript. В фирме, где я работал, мы начали постепенно мигрировать на beta-версию нового фреймворка. И даже написали некий прототип, судьба которого мне неизвестна, потому что я покинул эту фирму. То было темное время: так сильно я не выгорал никогда. Но статья не об этом. Используя полученные знания, я устроился в "кровавый энтерпрайз" – компанию "ТехноНИКОЛЬ", где участвовал в разработке логистической системы.

Там я получил отличный опыт разработки и ощутил мощь Angular. Методика написания приложения четко обозначена. В нем есть все необходимые модули типа HttpClientModule, а также большая база плагинов, написанных сообществом. Также можно делить логику на компоненты и сервисы. В связи со всем этим разработка представляет собой сборку приложения из готовых блоков, но с написанием чрезвычайно важной, нетривиальной логики. Например, мне запомнилось внедрение API Yandex.Карт – сервиса, помогающего отслеживать грузы на карте. Еще важный момент: в основе интерфейса лежит библиотека UI-компонентов Angular Material – при помощи нее можно реализовать Material Design от Google. Благодаря этим факторам я был сконцентрирован на реализации бизнес-логики и работал при этом над несколькими интересными задачами. Всю рутину уже выполнили создатели Angular.

Отдельный заслуживающий внимания момент – TypeScript. Этот диалект JavaScript может использовать типизацию. То есть заранее определять структуры данных, которых ожидает функция, метод, класс и т.д. Конечно, можно обойтись и без неё, тем более что она "ненастоящая": типы работают условно, и после компиляции мы получаем обычный JS. Но тогда разработка действительно больших приложений превратится в ад. Благодаря предопределенным структурам ты всегда знаешь, что ожидать от своего кода, и это прекрасно. Помимо этого, типизация делает программу более безопасной, что критично для enterprise-разработки. Ну и некоторые "фишки", которые есть в TypeScript, например декораторы и дженерики, сделали возможным появление Angular. На них завязаны все ключевые возможности фреймворка: компоненты, модули, сервисы, пайпы и т. д.

Кроме того, в логистическом проекте "ТехноНИКОЛЬ" я впервые использовал GraphQL – технологию от Facebook, созданную для удобного обмена данными между сервером и клиентом. Этот подход мне показался весьма интересным. Не знаю, как он реализовывался на back-end, но на front-end все было просто. По своей сути, эта технология представляет собой псевдоязык, на котором разработчики могут описывать в запросах, какие конкретно данные нужно получить с сервера. Он поддерживает вложенность и достаточно гибок. После разработки логистической системы я никогда его не использовал. Но впечатления остались весьма приятные, хотелось бы поработать с GraphQL снова.

Вернусь к Angular и сравню его с современными версиями React. Как я уже упомянул, разрабатывать проекты с первой из них стало значительно проще. Через пару лет использования Angular я начал осваивать современные версии React (которые с хуками). И хотя сейчас более популярна библиотека от Facebook, могу точно сказать, что создавать большие проекты на ней сложнее. Да, порог входа в React ниже, но при этом простые приложения, которые делают новички, можно реализовывать и без него. Сложные же проекты требуют особого внимания к архитектуре, проектированию, планированию и т.д. Не существует какого-то общего подхода к созданию front-end приложений на React, чего нельзя сказать об Angular.

Опытные программисты скажут: "Владимир, ты просто ленивый и не хочешь писать много кода". И я отвечу: "Да, так и есть". Я разделяю программирование на создание красивого кода и на реализацию бизнес-целей. В последние годы мне интереснее второе, что не мешает иногда программировать на чистом JavaScript или TypeScript и получать море удовольствия от алгоритмов, абстракций, какого-то изобретательства. Ну а если мне просто хочется пошевелить шестеренками в голове, я расчехляю пыльный проект на Haskell и продолжаю постигать этот невероятно интересный язык программирования.

Давайте подытожим, почему Angular – это самый крутой инструмент для написания front-end приложений. Его плюсы – это:

  1. Большое комьюнити и, как следствие, большая база плагинов.
  2. Множество UI-библиотек для сборки интерфейсов.
  3. Огромное количество статей с лучшими практиками (best practices).
  4. Постоянное обновление и добавление нового функционала.
  5. Поддержка со стороны Google.
  6. Возможность сконцентрироваться на бизнес-логике благодаря базовому функционалу "из коробки".
  7. Он написан на TypeScript – значит, есть типизация.
  8. Легко поддается тестированию и отладке.
  9. Его любят большие компании, и поэтому он фигурирует во многих вакансиях.
  10. Менее популярен, чем React – следовательно, меньше специалистов на рынке и выше зарплаты.

Если вы считаете иначе, то давайте обсудим это в комментариях. Также подписывайтесь на мои социальные сети! Всем спасибо и пока!

Twitter

Instagram

Telegram