Я работаю с AngularJS уже почти два года. И фреймворк, и то, как вы пишете приложения с его помощью, сильно изменились. Angular большой, и я не знаю всего, но мне удобно говорить, что я могу хорошо писать приложения Angular.

Мне также обычно нравится использовать Angular. Сейчас это не модно в мире Javascript, но это также не редкость. У Angular большое, позитивное и полное энтузиазма сообщество. Но стоит помнить, что его использование ничтожно мало по сравнению с сайтами с jQuery или даже с сайтами, использующими Backbone. Какая бы новинка Javascript сейчас не занимала место на HN, это еще меньше. Возможно, одна из этих вещей станет большим событием, но не без появления другой, более новой, более крутой вещи, которую вы определенно должны уже использовать.

Все это говорит о том, что Angular не идеален, и с приближением Angular 2 я хочу выделить сильные и слабые стороны, чтобы у меня была основа для его оценки. Эти пункты не особенно уникальны, и многие из них легко найти в популярных постах с подробным описанием.

Сильные стороны

  1. Тестируемость. Это моя любимая вещь в Angular, может быть, как ни странно. Несложно смоделировать части вашего приложения и написать полезные изолированные тесты. Это может быть сложно настроить в большом сложном приложении, но написание самих тестов работает хорошо. Во многом это связано с внедрением зависимостей, которое, хотя и не является распространенным шаблоном Javascript, является полезным шаблоном разработки программного обеспечения, который мне очень нравится в нашем приложении.
  2. Двусторонняя привязка. Ага. Может быть, я переживу это. Это по-прежнему полезно и по-прежнему экономит время для меня. Однако я понимаю, почему он потерял популярность, и мне интересно посмотреть, смогу ли я оставить его позади.
  3. Директивы. Не волнуйтесь, это также отображается во втором списке. Они мощные и позволяют мыслить компонентами (с некоторыми оговорками), что делает код более понятным. Кроме того, мне очень нравятся директивы атрибутов. Мне интересно узнать, как люди приспосабливаются к тому, чтобы их не было в чем-то вроде React.
  4. Всесторонний. Фреймворки против библиотек — интересная дискуссия. Но на самом деле это спор о том, кто строит ваш фреймворк: вы или кто-то другой? Там, где я использовал Angular, тот факт, что это фреймворк, созданный в другом месте, является положительным моментом. Большая группа разработчиков с разным уровнем опыта, пытающихся разобраться в наборе склеенных и собранных вместе библиотек, не является продуктивной средой. Фреймворк, в котором люди могут читать документы и вопросы Stack Overflow, чтобы понять, как что-то должно работать, кажется мне гораздо менее напряженным. Angular казался хорошим балансом между свободой создания шаблонов и соглашений, специфичных для компании, и наличием базовой структуры, в которой знания передаются от одного продукта к другому. И, наконец, я работаю в компании, производящей продукт. Наши разработчики создают функции, которые решают проблемы клиентов. Создание собственной специальной структуры не является целью клиента, и мы не нанимаем для этого сотрудников. А если бы мы это сделали? Еще труднее будет найти нужных людей.
  5. Представление. Этого достаточно. До сих пор я сталкивался с серьезными проблемами производительности один раз. И основными причинами были проблемы с производительностью сети: дизайн страницы делал предположения о вариантах использования, которые не были правильными, и мы не были осторожны с объемом данных, отправляемых в браузер и отображаемых. Конечно, Angular не был чем-то потрясающим, и мы внесли некоторые изменения (скорректировали использование односторонней привязки и когда использовать ng-if против ng-show), но фреймворк не помешал нам выполнить наши требования.

Слабые стороны

  1. Модули. Я ни разу не почувствовал, что это было полезно. Это то, что вы используете, потому что вам нужно. Я бы предпочел, чтобы мне предоставили делать это самой как можно больше.
  2. Директивы. Видишь, сказал тебе. Мы все знаем проблемы здесь. Директивный API неудобен. Конечно, части понятны, но это слишком. И хотя контроллер-как — это шаг вперед, и каждый должен его использовать, его сложно объяснить и обосновать тем, кто только учится.
  3. Цикл дайджеста волшебный и непрозрачный. Я не большой поклонник называть вещи «волшебными». Это часто означает «абстракция, которую мне не хочется изучать». Но я думаю, что это применимо здесь. Это сбивает с толку, у него есть недостатки, у него есть особенности производительности.
  4. Построить стек. Такие библиотеки, как Browserify и Webpack, просто фантастические. Но процесс начальной сборки, используемый генератором Angular Yeoman? Я хочу зажечь его на солнце. Это не ремонтопригодно (гигантский список скриптов на html-странице?). Это подталкивает вас к полностью статичному внешнему интерфейсу, что нереально (я начал чувствовать потребность в индексной странице, отображаемой сервером, еще до того, как закончил свое первое приложение). Жаль, что я не переключился на Browserify раньше. И я даже не упоминал минификацию.
  5. Фабрики, услуги, ценности и константы. Там, где я работаю, мы просто используем фабрики (которые мы называем сервисами). И константы (которые все меньше и меньше нуждаются в подключении к DI). Нам на самом деле не нужен Angular, чтобы сказать нам, какие объекты мы должны использовать в наших приложениях. Мы можем выяснить это самостоятельно. Решение Angular пойти с грязной проверкой простых объектов Javascript избавило нас от большого количества шаблонов. Я могу писать сервисы на Angular, которые представляют собой просто бизнес-логику, работающую с обычными объектами. Но тогда у нас есть эти ненужные типы объектов, в которые можно впихнуть все. Мне просто нужен способ зарегистрировать что-то в движке DI. В остальном я чувствую себя Java-разработчиком.

Есть и другие вещи, которые мне нравятся в Angular. Сообщество большое и прекрасное. Я думаю, что документы сейчас довольно хороши. Кривая обучения непростая, но не смешная. Но они более субъективны и, скорее всего, будут случайными оправданиями технического выбора.

Решает ли Angular 2 эти проблемы? Это определенно решает некоторые из них. Но эта оценка для другого дня.

* На самом деле не супер или важно.