Вот пять причин, по которым Java-разработчики любят Angular. Этот список не является исчерпывающим, это просто наблюдение из моего собственного опыта.
Обратите внимание, что эта статья не направлена против других front-end фреймворков, таких как Vue, React или Svelte, а является размышлением о моем опыте использования Angular с Java.
1) Инъекция зависимостей
Если вы знакомы с экосистемой Java (Spring Boot, JAX-RS), то наверняка хотя бы слышали об инверсии контроля или инъекции зависимостей DI.
`В программной инженерии инъекция зависимостей — это техника, с помощью которой один объект (или статический метод) предоставляет зависимости другому объекту. Зависимость — это объект, который может быть использован (сервис)`.
Что, черт возьми, это значит? Рассмотрим компонент Hero в angular hero.component.ts Компоненту нужны данные для отображения, рассмотрим использование API для получения данных. Разве мы не можем напрямую вызвать API из компонента? Можем, но стоит ли?
Мы используем уровень абстракции, например, сервис heroes.service.ts, чтобы предоставить нам данные, сервис может вызвать реальный API или подражать некоторым данным. Компонент героя отвечает за отображение результата, а не за его получение. Сервис предоставляет данные компоненту. Таким образом, сервис является зависимостью
от компонента, чтобы использовать сервис, компонент должен Inject
его.
Но зачем нам нужно инжектировать сервис? Разве мы не можем создать объект сервиса, чтобы использовать его? Поскольку фреймворк отвечает за инъекцию сервиса, легко unit
тестировать компонент, инжектируя имитатор сервиса. Макетный сервис возвращает нужные данные из сервиса и тестирует компонент в изоляции, а не полагается на сервис для тестирования компонента.
Макетирование в основном используется в модульном тестировании. Тестируемый объект может иметь зависимости от других (сложных) объектов. Чтобы изолировать поведение объекта, вы хотите заменить другие объекты моками, которые имитируют поведение реальных объектов. Это полезно, если реальные объекты нецелесообразно включать в модульный тест.
Короче говоря, мокинг — это создание объектов, которые имитируют поведение реальных объектов.
Большинство этих концепций Angular уже есть в Java, будь то внедрение зависимостей, модульное тестирование с помощью JUnit и Mockito, MVC.
2) Архитектура MVC
Да, вы не ослышались! Оба Angular & Java имеют шаблон проектирования MVC Model View Controller. Если вы знакомы с MVC на Java или C#, вы быстро оцените и узнаете паттерны и влюбитесь в них в Angular.
Для быстрого сравнения паттернов и Angular, и Java имеют классы и интерфейсы для представления модели, контроллер — это как компонент в Angular и конечная точка API в Java. Оба они используют сервисы и инъекцию зависимостей для получения данных.
3) Typescript
Знаете ли вы, что на момент выхода Angular 2 компания Google планировала создать отдельный язык для Angular? Но они сотрудничали с Microsoft, чтобы интегрировать Typescript в Angular!
Для грамотного Java-разработчика синтаксис TypeScript относительно прост. Как и в Java, в синтаксисе TypeScript есть механизмы для определения перечислений, итеративных циклов, методов, классов, интерфейсов и конструкторов. Ни одна из этих тем не является чуждой для тех, кто знаком с утилитой javac. Но хотя ключевые понятия одни и те же, синтаксис TypeScript существенно отличается. (Это может сделать переход с Java на TypeScript разочаровывающим опытом, поскольку задачи, когда-то простые в Java, могут вызвать эзотерические ошибки при компиляции соответствующего TypeScript).
4) Схожий синтаксис и ощущение
И TypeScript, и Java используют концепцию класса для реализации объектно-ориентированных концепций. Сходство между ними заключается в том, что классы могут иметь методы, конструкторы и переменные, хотя каждый из этих элементов объявляется немного по-разному. В следующем примере показана разница между объявлением простого класса Java и простого класса TypeScript.
Что такое take away? Классы, интерфейс в Java, Angular (Typescript) выглядят очень идентично и очень похоже. Опыт работы с одним из языков очень поможет вам понять другой.
5) Поддержка и проверка типов
В Angular у вас нет выбора, кроме как использовать функции Typescript из коробки! Поэтому вам не придется беспокоиться о том, что вы передадите в функцию неправильный тип аргумента pass a string
to a number
, ожидая, что функция typescript сразу же скажет вам об этом! Проверка типов в Java недооценивается, поскольку в Java невозможно даже представить себе передачу строки в функцию, ожидающую числовой аргумент. С Javascript дело обстоит иначе. Typescript заполняет этот пробел, расширяя javascript, и является супермножеством Javascript и добавляет поддержку типов, подобную той, что есть в Java. Поддержка типов очень мощная и значимая, она экономит много времени при отладке.
На этом пока все. Конечно, приведенные причины являются лишь отражением моего опыта и, как я считаю, одной из причин, по которым Java-разработчики склонны любить Angular и оставаться с ним.
[1]: Краткое введение в Dependency Injection: что это такое и когда его использовать
https://www.freecodecamp.org/news/a-quick-intro-to-dependency-injection-what-it-is-and-when-to-use-it-7578c84fa88f/
[2]: Что Java-разработчикам нужно знать о синтаксисе TypeScript
https://www.theserverside.com/tutorial/What-Java-developers-need-to-know-about-TypeScript-syntax#:~:text=Java%20has%20methods%2C%20while%20TypeScript,t%20have%20typed%20method%20parameters.
[3]: Что такое Mocking?
https://stackoverflow.com/questions/2665812/what-is-mocking