Angular. Как правильно рабать с входными и выходными данными. Библиотека class-transformer

Поділитися
Вставка
  • Опубліковано 26 січ 2025

КОМЕНТАРІ • 31

  • @fidget82
    @fidget82 2 роки тому +1

    Интересный подход, возьму на вооружение. Спасибо за труд!

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Всегда пожалуйста 😊

  • @vinogradova619
    @vinogradova619 2 роки тому +2

    Спасибо, очень полезные знания.

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      Согласен 😉

  • @АртурЛагунов-ч6ъ

    Дорый день. Спасибо большое за очень полезную библиотеку, посмотрев возник вопрос: в каком слое правильно делать данное преобразование? На ум приходит написать map в котором сохранить соответствие интерфейса backend классу frontend, и сделать интерцептор который получив данные будет проверять типы и производить преобразование, таким образом в сервис попадет класс обладающий поведением, очень хотелось бы узнать что думаете , используется ли такое?

    • @Kulibins1
      @Kulibins1  Рік тому +1

      Я просто использую при получении pipe map и вызываю преобразование и обратно, так же приходит объект и делаю вызов обратного преобразования. Вариант интерсептора интересный, но более сложный и как бы логика будет не очевидна, для другого разработчика

  • @serhiitachuk
    @serhiitachuk Рік тому +1

    на каком уровне лучше делать трансформацию? сразу при получении данных с бэкенда? или лучше в селекторе? в случае отдельного селектора мы сможем иметь версию с оригинальными данными

    • @Kulibins1
      @Kulibins1  Рік тому +1

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

  • @fidget82
    @fidget82 2 роки тому +1

    Momentjs разве еще живой? Они на своем же сайте рекомендуют использовать более современные альтернативы. В частности luxon.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      С моментом очень много чего сделано, а альтернативы рассмотрю в видео, когда буду про момент записывать. В этом видео его применил из-за распространенности и известности. Наверное один из главных недостатков момента это его размер 🤣

  • @Maximurz1k
    @Maximurz1k 2 роки тому +1

    Здравствуйте Александр
    30 мин ждал кейса на случай валидации типов с бекенда
    Как например делает yup в реакт формах ну и в ангуляре похоже. А что если на фронт пришли невалидные данные…крошить не ок, обрабатывать хз как

    • @Kulibins1
      @Kulibins1  2 роки тому +2

      По валидации данных есть отдельные библиотеки, об одной из них конечно расскажу.

  • @VasyaFF
    @VasyaFF 2 роки тому +1

    Был опыт использования date-fns только потому, что он работает с Angular Material.

  • @izyumrockstar7815
    @izyumrockstar7815 2 роки тому +1

    А чего нельзя взять респонс с бека, и пропустить через класс модели ( new Model) и там сделать все преобразования ?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

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

  • @pavelchekushkin6860
    @pavelchekushkin6860 2 роки тому +1

    cool

  • @ilnurryazhapov
    @ilnurryazhapov 2 роки тому +1

    не очень нравится подход с декораторами, все-таки непонятно что с ними будет когда в js завезут нативные
    и не ясно для чего импорт reflect metadata и почему нельзя без него обойтись
    вообщем было бы здорово увидеть альтернативу class-transformer которая была бы более легковесной, без декораторов и без необходимости в лишних импортах

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Альтернатива только свои функции преобразования. Если посмотреть код библиотеки, он внутри кучу полезного делает, как-то более легковесное трудно сделать. А без декораторов код становится менее декларативным.

  • @AlexAlex-mq6sg
    @AlexAlex-mq6sg 2 роки тому +3

    Это конечно прикольно. Но как показывает практика проще самому написать преобразование чем использовать такие библиотеки,
    1 всегда будет какой-то вредный случай который не получится сделать с этой библиотекой
    2 разобраться с такой библиотекой не всегда быстро получается. Каждому новому программисту нужно объяснять что это за зверь или на каждый не стандартный случай лезть в документацию которая не всегда нормальная

    • @Kulibins1
      @Kulibins1  2 роки тому +3

      Библиотека предельно простая, я использую 4 декоратора и всё. А так да как и сказал все делают первый вариант, только несколько раз ловил ошибки из-за object.assign, а его любят использовать ибо лень.

  • @VasyaFF
    @VasyaFF 2 роки тому +1

    Вместо value = name + '_1' лучше писать value = `${name}_1`
    Без наездов - делюсь опытом.
    Вообще полезно читать статьи вроде "10 новых фишек JS", или "За что мы ненавидим JS". Мои первые code review состояли в том, чтобы взять эти фишки в работу.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Конечно я знаю про строковые литералы и интерпретацию строк 😉

    • @VasyaFF
      @VasyaFF 2 роки тому +1

      @@Kulibins1 один блогер советовал писать под роликами, чтобы те, кто туда придут через 1-2-10 лет смогли извлечь для себя пользу.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      @@VasyaFF полезное дело 👍

  • @mrjekagm
    @mrjekagm 2 роки тому +1

    Swagger всё это делает.

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Не понял что он делает? То что можно автоматически сгенерировать клиент - у меня есть про это ролик. Тут виде про то что мы получаем одно, а работаем с другим, например свагер не сделает вам moment или расширение как я в видео показал.

    • @mrjekagm
      @mrjekagm 2 роки тому +1

      @@Kulibins1 ну moment он сгенерит, почему нет?

    • @Kulibins1
      @Kulibins1  2 роки тому

      @@mrjekagm приведите пример

  • @ondatrai
    @ondatrai 2 роки тому +1

    Во-первых, moment.js уже 1,5 года не поддерживается, во-вторых - вы размер этого пакета видели?

    • @Kulibins1
      @Kulibins1  2 роки тому +1

      Я уже в комментах именно на эти вопросы ответил, посмотрите, их тут мало. Все озвученные вопросы я в курсе 😉