Почему являются объекты передачи данных (DTOs) антишаблоном?

git config --global core.excludesfile "c:\program files\whatever\global_ignore.txt"

Затем добавьте

*.foo

в тот файл.

125
задан Peter Mortensen 3 September 2017 в 15:03
поделиться

8 ответов

Некоторые проекты содержат все данные дважды . Один раз в качестве объектов домена и один раз в качестве объектов передачи данных.

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

129
ответ дан 24 November 2019 в 00:56
поделиться

DTO не являются анти- -шаблон. Когда вы отправляете некоторые данные по сети (например, на веб-страницу в вызове Ajax), вы хотите быть уверены, что сохраняете полосу пропускания, отправляя только данные, которые будет использовать пункт назначения. Кроме того, часто для уровня представления удобно иметь данные в формате, немного отличном от формата собственного бизнес-объекта.

Я знаю, что это вопрос, ориентированный на Java, но в языках .NET анонимные типы, сериализация и LINQ позволяют создавать DTO «на лету», что сокращает время настройки и накладные расходы на их использование.

123
ответ дан 24 November 2019 в 00:56
поделиться

DTO в AntiPattern в EJB 3.0 говорит:

Тяжелая природа Entity Beans в спецификациях EJB до EJB 3.0, что привело к использованию шаблоны проектирования, такие как передача данных Объекты (DTO). DTO стали легкие объекты (которые должны иметь были самими сущностями beans в первое место), использованный для отправки данные по уровням ... теперь EJB 3.0 spec делает модель компонента Entity такой же как обычный старый объект Java (POJO). С эта новая модель POJO, вы не будете больше не нужно создавать DTO для каждого сущность или для набора сущностей ... Если вы хотите отправить объекты EJB 3.0 через уровень сделать их просто реализовать java.io.Serialiazable

24
ответ дан 24 November 2019 в 00:56
поделиться

Я не думаю, что DTO являются антипаттерном сами по себе, но есть антипаттерны, связанные с использованием DTO. Билл Дадни приводит в качестве примера взрыв DTO:

http://www.softwaresummit.com/2003/speakers/DudneyJ2EEAntiPatterns.pdf

Здесь также упоминается ряд злоупотреблений DTO:

http: //anirudhvyas.com/root/2008/04/19/abuses-of-dto-pattern-in-java-world/

Они возникли из-за трехуровневых систем (обычно использующих EJB в качестве технологии) в качестве средства передачи данные между уровнями. Большинство современных Java-систем, основанных на таких фреймворках, как Spring, используют альтернативный упрощенный вид с использованием POJO в качестве объектов домена (часто аннотированных JPA и т. Д.) На одном уровне ... Использование DTO здесь не требуется.

19
ответ дан 24 November 2019 в 00:56
поделиться

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

18
ответ дан 24 November 2019 в 00:56
поделиться

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

В этой статье расплывчато описаны некоторые нарушения.

8
ответ дан 24 November 2019 в 00:56
поделиться

Если вы строите распределенную систему, то DTO определенно не антипаттерн. Не все будут развиваться в этом смысле, но если у вас есть (например) приложение Open Social, все работают на JavaScript.

Он отправит загрузку данных в ваш API. Затем он десериализуется в некоторую форму объекта, обычно в объект DTO / Request. Затем это можно проверить, чтобы убедиться, что введенные данные верны, перед преобразованием в объект модели.

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

8
ответ дан 24 November 2019 в 00:56
поделиться

Я думаю, люди имеют в виду, что это может быть антишаблон, если вы реализуете все удаленные объекты как DTO. DTO - это просто набор атрибутов, и если у вас есть большие объекты, вы всегда будете передавать все атрибуты, даже если они вам не нужны или не используете их. В последнем случае предпочтительнее использовать шаблон прокси.

0
ответ дан 24 November 2019 в 00:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: