Зачем нужны DTO, когда есть типы и интерфейсы в языках программирования?

DTO нужны, для того что бы ограничить и структурировать взаимодействия разных слоев и сущностей программы. Этот принцип относиться ко всем языкам программирования, а не к конкретному. Тут понятно.

Но возьмем к примеру фреймворк - Nest. Там использование DTO в виде классов, аргументируется тем, что TypeScript при транспиляции "теряет" эти типы и поэтому их реализовывают сразу в виде классов JS.

Но если взять тот же C# или Java. Там тоже применяется DTO, но зачем, если можно использовать интерфейсы самого языка?
  • Вопрос задан
  • 171 просмотр
Решения вопроса 2
mayton2019
@mayton2019
Bigdata Engineer
DTO объекты часто пересекают границы Языков (Java/JavaScript/GWT) и сетевых протоколов (Rest/Graphql/SOAP/Avro).

И эти объекты могут нести на себе семантику только чистых данных. Вы не сможете через сеть
из Java в C# например передать интерфейс или объект с методами.

И многие фреймворки искусственно ограничивают DTO как раз для того чтобы эти объекты однозначно
декодировались всеми сторонами-участниками протокола взаимодействия. А фреймворки - обычно
предоставляют средства кросс-компилляции этих DTO.
Ответ написан
Комментировать
sergey-gornostaev
@sergey-gornostaev
Седой и строгий
Потому что компоненты приложения не должны иметь жёстких связей между собой и должны опираться на максимально узкий скоуп используемых данных. Незачем какому-нибудь там адаптеру, шлющему в очередь уведомления об изменения статуса модели, иметь доступ ко всем полям этой модели и иметь зависимость от прикладного ядра или слоя доступа к данным.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
Потому что DTO, изначально - некая структура для хранения конечных данных. Контейнер. В самом языке (любом) его не существует. Это лишь паттерн. Паттерн, при котором есть DTO, контейнеры с данными и отдельно есть классы с методами или процедуры/функции которые будут производить манипуляции с этими DTO. В самих DTO не должно быть методов.

Просто погугли, что такое DTO
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы