Как стать автором
Обновить

Комментарии 25

Я может сейчас чего-то не понял, но где хоть одно слово про архитектуру фронта в этой статье?

Ну да

Не смотря на полезность статьи – название абсолютно не отображает ее сути:)

Поменяли, приносим извинения :)

Добрый день. Смысл статьи в том, что необходимо разделять бизнес логику и  ui логику.  В целом, это первая статья из цикла статей по оптимизации и подходам на фронте. Для начала мы рассказали, как сделать жизнь легче путем автоматизации  некоторых процессов (автогенерацию). В планах - рассказ, как сделать быстрый ui, затем, как все соединить в единое целое. Для ясности постараемся четче подбирать названия для статей.

Да я вообще не сварщик, я на С++ пишу :) Просто зашёл почитать про архитектуру, мало ли какой-нибудь прикольный архитектурный принцип завезли, можно будет подумать над тем, имеет ли предлагаемая архитектура право на жизнь в других языках, а тут просто обзор двух фреймворков. Сейчас название получше)

Декораторы – функционал декларативного программирования, позволяющий расширить любые методы, какие только пожелаем.

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

Третий недостаток состоит в том, что большинство проверок на тип и пустоту требуется осуществлять вручную, так как в express.js применяется ES, а не TS. Также к минусам отнесу пляски с выставлением кукис и прочим серверным взаимодействием со стороны UI.

ES? Что мешает использовать express с TS? какие проблемы у express с cookies? И как это решает nest?

Прочим серверным взаимодействием - что конкретно не так, и как это решает nest?

Почему axios, rest, swagger, angular

Тупо кликбейт

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

С кукис проблема следующего характера: их на экспрессе надо постоянно парсить при каждом запросе, затем, если надо, выставлять и совершать прочие манипуляции.  Упрощение работы с кукис происходит только тогда, когда мы прикручиваем сторонние плагены, но опять же это сторонние зависимости.

 У nest есть базовые компоненты для работы с кукис, например, интерсептор помогает подсовывать их в автоматическом режиме при запросе к беку,  или в контролерах  использовать через контекст при ответах на ui. 

Почему axios, rest, swagger, angular. Потому что axios позволяет нам перехватывать запросы и подсовывать мок, что упростит нам тестирование в автоматическом режиме. Rest - самый используемый паттерн  взаимодействия.  А это значит, что он будет большинству полезен. Но nest умеет работать почти со всем.

Swagger - самый удобный инструмент для самодокументированного кода, что позволяет протестить бек, прослойку между беком и ui , спокойно, без лишних плясок. 

Angular – мы его используем в повседневной работе, но в статье также упомянуто, что можно выбрать и другие  приложения, просто зайдите на сайт.

С каких пор добавление поддержки TS стало костылем? У express есть типы на TypeScript, которые зачастую используются в nestjs, nestjs все лишь набор оберток вокгур популярных решений(в том числе и express)

interceptor - это middleware которое есть в express, в express обычно так же мутируют реквест(точнее nestjs делает это так же как в express, fastify использует немного другую технику, но тут о нем речи нет)

да есть куча тулов и дока по несту имеет хорошее описание, так почему именно эти - в чем их эффективность?

Первый и самый главный — гибкость. Это означает, что при отсутствии навыков его использования вы или совершите ошибки, или случайно откроете временной портал.

дереватив гибче родителя? - ну ок

Второй недостаток — импорт. Данный функционал реализован не слишком нативно, поэтому если вы просчитались с архитектурой, то мешанины вам не избежать.

чего?

серьезно, я сам использую nest, но титул - как эффективно использовать nest.js, сводится к полуярным либам, и к сложности добавления tsconfig к экспрессу.

если использвать TS c express количество dto станет меньше?

С каких пор добавление поддержки TS стало костылем? У express есть типы на TypeScript, которые зачастую используются в nestjs, nestjs все лишь набор оберток вокгур популярных решений(в том числе и express)

Давайте по порядку, прекратить TS ко всему можно. Вопрос что может из коробки и сколько действий потребуется для того что бы начать разрабатывать с удовольствием и удобством.

interceptor - это middleware которое есть в express, в express обычно так же мутируют реквест(точнее nestjs делает это так же как в express, fastify использует немного другую технику, но тут о нем речи нет)

Его можно сгенерировать автоматически? он удобнее? Где его проще написать? Вопрос не в том что где есть, а где удобнее. Подход почти везде одинаков, исполнение везде разное. Как говориться дьявол, кроиться в деталях.

да есть куча тулов и дока по несту имеет хорошее описание, так почему именно эти - в чем их эффективность?

в статье вроде ни где не указано что они единственные и неповторимые, просто автор привел то с чем работает. Есть другие на примете, давайте делиться. С радостью прочитаю обзор и сравнение на них.

Первый и самый главный — гибкость. Это означает, что при отсутствии навыков его использования вы или совершите ошибки, или случайно откроете временной портал.

Чем гибче инструмент тем больше ответственность за архитектуру, можно натворить циклических зависимостей и прочего ненужного. Фреймворк - забирает гибкость но в замен дает стандарт использования. Так как фреймворк имеет четко очерченную зону ответственности у каждой его части.

Второй недостаток — импорт. Данный функционал реализован не слишком нативно, поэтому если вы просчитались с архитектурой, то мешанины вам не избежать

автор имел ввиду require.

серьезно, я сам использую nest, но титул - как эффективно использовать nest.js, сводится к полуярным либам, и к сложности добавления tsconfig к экспрессу.

если использвать TS c express количество dto станет меньше?

Что-то вас не понял, причем количество DTO, вопрос в том что можно автоматизировать данный процесс. С радостью выслушаем ваш опыт использования и советы по использованию.

 С радостью выслушаем ваш опыт использования и советы по использованию.

куда мне-то давать советы, я умею только в доку, зашел почитать как использовать оптимальнее

Мне кажется, что сравнивать micro фреймворк и full-stack фреймворк — кощунство.

Это как сравнивать sinatra.rb и Ruby on Rails.

ну как-то сравнивают же реакт и ангуляр? По сути тоже самое. Они оба выполняют одну и туже функцию. Вопрос удобства и порога вхождения

Как эффективно использовать-то? )

тут вроде рассказывается что и как. Приведенные пакеты помогут автоматизировать, алгоритм прост.

Перечень действий:

  1. устанавливаем пакеты

  2. с помощью @apidevtools/swagger-parser мы парсим свагер бека для того что получит JSON для обработки

  3. потом его переводим в удобно используемый код с помощью Swagger-typescript-api

  4. далее при помощи Swagger-ui-express мы сможем иметь свагер нашего BFF

  5. А для автоматизации тестирования что бы подставлять моки (перехват запросов) используем Axios

выше изложенные действия экономят нам кучу времени на описания интерфейсов и прочего

как минимум скорости написания кода, разве нет? Качество кода...

Сравнивать Express, который, по сути, просто библиотека, с полноценным фреймворком в виде Nest.js, это какое-то издевательство над первым ?

Ну тут вопрос реторический как реакт и ангуляр. Но реакт разработчики говорят что ангуляр не ровня.

Особенно смешно читать по причине того, что nest использует как раз express.

Требуется выучить большой объём информации, чтобы правильно все использовать.
Да нет. Его прелесть как раз в том, что стартовый проект легко заводится. Нет необходимости досконально знать каждый аспект/компонент, а можно изучать по мере необходимости.

Придётся много писать DTO, для того чтобы данные корректно обрабатывались в запросе.
Странно жаловаться на это. Это как жаловаться на возможность/необходимость использовать типы в ts.

Придётся иногда делать множественные проверки по типам, например, Enum и прочие.
Можно подробнее о каких проверках речь?

Да нет. Его прелесть как раз в том, что стартовый проект легко заводится. Нет необходимости досконально знать каждый аспект/компонент, а можно изучать по мере необходимости.

Большой объём инфы, по сравнению с express. А так же не надо забывать что плоха можно написать везде, а вот правильно не всегда просто. Как пример Interceptor это же по сути сервис, и его функциональность можно руками сунуть во внутрь

Странно жаловаться на это. Это как жаловаться на возможность/необходимость использовать типы в ts.

Это не жалоба, это просто примечание того что boilerplate много писать придаться в части DTO. Как пример доскональное описание полей а так же их проверок.

Можно подробнее о каких проверках речь

пример описания пары полей ниже, просто представите то у вас порядка 50 полей и на каждое надо описание как ниже

// Пример описания ответа
@ApiProperty({
    description: 'Код сообщения',
    type: String,
    example: 'USERS_001',
})
code?: string;

@ApiProperty({
    description: 'Уровень сообщения',
    enum: getEnumValues(SelectedLevelTypes), /сравнение с Enum
    required: false,
    example: SelectedLevelTypes.INFO,
})
@IsEnum(SelectedLevelTypes)
level?: SelectedLevelTypes;

@ApiProperty({
    description: 'Текст сообщения',
    type: String,
    example: 'Catalog service does not reply',
})
text?: string;

//  описание одного поля для входного параметра 
@ApiProperty({
    description: 'Координаты',
    type: GeolocationAddresses,
    required: false,
})
@IsOptional()  / параметр не обязателен в  запросе
@Type(() => GeolocationAddresses) // что данное поле имеет сложное тип (тоесть
вложенность)
@ValidateNested({ each: true }) // включение проверки вложенных типов
geolocation?: GeolocationAddresses;

пример описания пары полей ниже, просто представите то у вас порядка 50 полей и на каждое надо описание как ниже
Так это же для свагера. В express'е не меньше бы писать пришлось.

не совсем оно так, к свагеру относиться только код нижу

@ApiProperty({
    description: 'Координаты',
    type: GeolocationAddresses,
    required: false,
})

А все остальное это пайпы самого nestjs. О которых вы можете прочитать здесь. Так же пайпов может быть довольно-таки много если сложные проверки например, когда одно поле зависит от другого.

причем здесь пайпы - это обычные dto объекты которые будут в любом статически типизированном бэкенде. То что вам надо десерилизовать данные из запроса - в каком-нибдуь dotnetcore этого делать не надо? да надо

большие проекты на express и nestjs по структуре сильно похожи, теже +/-тулы, по сути команда nestjs обобщила хорошие практики из бэкендов на ноде и сделала удобный враппер, как next вокруг react

Зарегистрируйтесь на Хабре, чтобы оставить комментарий