NestJs: Зачем нам нужны DTO и интерфейсы в NestJS? - PullRequest
0 голосов
/ 29 ноября 2018

В документации NestJS показано, как добавить DTO для использования в контроллерах для проверки объектов запроса с помощью пакета class-validator.Описанные DTO есть классы TypeScript.Теперь, когда контроллеры работают с DTO (классами TS), поставщики (или службы) NestJS, с другой стороны, используют интерфейсы TypeScript.Эти DTO и интерфейсы в значительной степени одинаковой формы.

Теперь я вижу дублирование определения формы здесь.И интересно, нужны ли вообще интерфейсы?

Разве мы не можем сделать DTO источником истины для формы и валидации?Один из подходов, который мы рассматривали (чтобы сделать истину для DTO), заключался в том, чтобы генератор openapi принимал DTO в качестве входных данных и генерировал определение openapi, а оттуда другой коден мог генерировать набор интерфейсов машинописи, которые будут использоваться самим NestJS.и которыми можно поделиться с другим набором потребительских приложений, таких как Angular .

Кто-нибудь сталкивался с подобной проблемой?Что вы думаете о вышесказанном.Обратная связь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Я думаю, важно знать, что такое DTO.

DTO(Data Transfer Object) - это концепция Java(J2EE) дизайна.

Он выглядит как обычный Java Bean объект, которыйбыл создан для передачи объекта данных через несколько слоев (таких как controller, service, database) в нашем бэкэнде, особенно в Distributed Systems.

Без DTO Модель

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

Application -> WebService -> Database

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

С DTO Модель

Это помогает нам обрабатывать наш объект данных.


В руководстве NestJS, DTO действует как HTTP Request тело.

На мой взгляд, DTO содержит:

  • некоторые атрибуты, которые мы будем использовать, но не в Database.

и DTO масках:

  • некоторые атрибуты, которые мы не хотим раскрывать.

Для использования с class-validator, DTO также может помочь нам элегантно проверить данные.

Иногда это выглядит так же с объектом interface.

Я думаю, DTO имеет значение, когда наша коллекция баз данных огромна и сложна.

0 голосов
/ 29 ноября 2018

Я не эксперт, но я вообще не использую DTO.Я действительно не вижу смысла для них.В каждом модуле у меня есть сервис, модуль, сущность и контроллер.

...