Я пишу backend на Nest.js, почему я должен создавать DTO именно в классах?

Ссылка скопирована
1 ответ

Почему все пишут именно в классах, а не например в интерфейсах TypeScript?

Я пишу backend на Nest.js, почему я должен создавать DTO именно в классах?

Дополнительно:

так должен или должна?

  • Everything_is_bad, Имеет значение?
  • Вика Мармеладка, можешь в интерфейсах написать, тогда за место класса - сделать просто функцию которая возвращает объект у которого будет тип этого интерфейса
  • szQocks, Я не могу просто сразу везде где требуется указать DTO в виде моего класса, указать интерфейс TS. По итоге одно и тоже получится. Или нет?
  • Вика Мармеладка, да одно и тоже, хз как там именно в nest, может там паттерны специальные для всего чего угодно есть, Alexandroppolus в ответе скинул ссылку на тело запроса, там вообще в примере по другому пишется этот dto
  • https://habr.com/ru/companies/timeweb/articles/663234/

    см. пункт "тело запроса"

    • Блин, спасибо большое. Я так и думала, что это связано с последующей транспиляцией тс

    Ответы:

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

    Вообщем: в интерфейсах описывают всё без логики.

    • Но и в классах описываются только поля с их типами. Там нет логики. Или я ошибаюсь?
    • Вика Мармеладка, можете и там и там писать логику. По канону и всем правилам в интерфейсах пишут без логики, а потом пишут её в другом месте

    Если ты это все пропишешь в интерфейсах typescript, то после компиляции проекта в JavaScript интерфейсы исчезнут, а если делать через классы, то это все останется после компиляции typescript в JavaScript. Dto нужны для типизации передаваемых/получаемых данных между слоями приложения.

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Юрий Linux Ответ

    DTO (Data Transfer Object) - это объект, который используется для передачи данных между слоями приложения, такими как контроллеры и сервисы. Создание DTO классов в Nest.js имеет несколько преимуществ:

    1. **Структурирование данных:** DTO классы позволяют явно определить структуру данных, которые передаются между различными частями приложения. Это делает код более понятным и легким для поддержки.

    2. **Валидация данных:** Nest.js предоставляет возможность использовать встроенный механизм валидации данных с помощью класса `ValidationPipe`. Создание DTO классов позволяет определить правила валидации для каждого поля данных.

    3. **Безопасность:** Использование DTO классов помогает защитить ваше приложение от нежелательных данных, которые могут быть отправлены клиентом. Вы можете явно указать, какие данные должны быть переданы и в каком формате.

    4. **Удобство в тестировании:** При наличии явно определенных DTO классов тестирование становится более простым, поскольку вы можете легко создавать тестовые данные и проверять результаты.

    Пример создания DTO класса в Nest.js:

    export class CreateUserDto {
      readonly username: string;
      readonly email: string;
      readonly password: string;
    }

    export class CreateUserDto { readonly username: string; readonly email: string; readonly password: string; }

    Использование DTO классов в Nest.js поможет вам создавать структурированные и безопасные приложения, улучшая их читаемость и обслуживаемость.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно