7 ответов:
объект передачи данных-это объект, который используется для инкапсуляции данных и отправки их из одной подсистемы приложения в другую.
DTOs наиболее часто используются уровнем служб в N-уровневом приложении для передачи данных между собой и уровнем пользовательского интерфейса. Главным преимуществом здесь является то, что он уменьшает объем данных, которые должны быть отправлены по проводам в распределенных приложениях. Они также делают отличные модели в шаблоне MVC.
другое использование для DTOs можно инкапсулировать параметры для вызовов методов. Это может быть полезно, если метод принимает более 4 или 5 параметров.
при использовании шаблона DTO вы также будете использовать ассемблеры DTO. Ассемблеры используются для создания DTOs из объектов домена, и наоборот.
преобразование из объекта домена в DTO и обратно может быть дорогостоящим процессом. Если вы не создаете распределенное приложение, вы, вероятно, не увидите никаких больших преимуществ от шаблона, как Мартин Фаулер объясняет здесь
определение для DTO можно найти на сайт Мартина Фаулера. DTO используются для передачи параметров в методы и в качестве возвращаемых типов. Многие люди используют их в пользовательском интерфейсе, но другие раздувают объекты домена из них.
DTO-это тупой объект - он просто содержит свойства и имеет геттеры и сеттеры, но никакой другой логики любого значения (кроме, возможно, реализации compare() или equals ()).
обычно классы модели в MVC (при условии .сетка здесь в MVC) являются объекты переноса данных или коллекций/агрегаты объекты переноса данных
в общем Предметов Стоимостью должно быть неизменным. Как целое или строка объекты в Java. Мы можем использовать их для передачи данных между уровнями программного обеспечения. Если программные слои или службы работают на разных удаленных узлах, например в среде микросервисов или в устаревшем приложении Java Enterprise. Мы должны сделать почти точные копии двух классов. Здесь мы и познакомились с ДТО.
|-----------| |--------------| | SERVICE 1 |--> Credentials DTO >--------> Credentials DTO >-- | AUTH SERVICE | |-----------| |--------------|в наследство Ява корпоративных систем объекты переноса данных может иметь различные вещи EJB в нем.
Я не знаю, это лучшая практика или нет, но я лично использую Предметов Стоимостью в моих весенних MVC/Boot проектах, как это:
|------------| |------------------| |------------| -> Form | | -> Form | | -> Entity | | | Controller | | Service / Facade | | Repository | <- View | | <- View | | <- Entity / Projection View | | |------------| |------------------| |------------|контроллер слой не знает, что такое сущности. Он связывается с форма и Просмотр Объектов Значения. Объекты формы имеют аннотации проверки JSR 303 (например @NotNull) и Просмотр Объектов Значения у Джексона Аннотации для пользовательской сериализации. (например @JsonIgnore)
уровень сервиса взаимодействует со слоем репозитория с помощью объектов сущности. Объекты сущности имеют аннотации данных JPA/Hibernate/Spring на нем. Каждый слой взаимодействует только с нижним слоем. Межуровневая связь запрещена из-за циклической/циклической зависимости.
User Service ----> XX CANNOT CALL XX ----> Order Serviceнекоторые ОРМ фреймворки имеют возможность проекции с помощью дополнительных интерфейсов или классов. Таким образом, репозитории могут возвращать объекты просмотра напрямую. Там для вас не потребуется дополнительная трансформация.
например, это наш пользовательский объект:
@Entity public final class User { private String id; private String firstname; private String lastname; private String phone; private String fax; private String address; // Accessors ... }но вы должны вернуть разбитый на страницы список пользователей, которые просто включают id, firstname, lastname. Затем вы можете создать объект значения представления для проекции ORM.
public final class UserListItemView { private String id; private String firstname; private String lastname; // Accessors ... }вы можете легко получить результат разбиения на страницы из слоя репозитория. Благодаря весной вы также можете использовать только интерфейсы для составление прогнозов.
List<UserListItemView> find(Pageable pageable);Не беспокойтесь о других операциях преобразования
BeanUtils.copyметод работает просто отлично.
с помощью MVC объекты передачи данных часто используются для сопоставления моделей доменов с более простыми объектами, которые в конечном итоге будут отображаться в представлении.
с Википедия:
объект передачи данных (DTO), ранее известный как объекты value или VO, является шаблон проектирования, используемый для передачи данных между программными приложениями подсистемы. DTO часто используются в сочетании с доступом к данным объекты для извлечения данных из базы данных.
1) для меня лучший ответ на вопрос, Что такое DTO, заключается в том, что DTO-это простые объекты, которые не должны содержать никакой бизнес-логики или реализации методов, которые потребовали бы тестирования.
2) обычно ваша модель (с использованием шаблона MVC) является интеллектуальными моделями, и они могут содержать много/некоторые методы, которые выполняют некоторые различные операции для этой модели специально (не бизнес-логика, это должно быть на контроллерах). Однако, при передаче данных (например. вызов остальных (GET/POST/whatever) конечная точка откуда-то или использование веб-сервиса с использованием soa и т. д...) вы не хотите передавать объект большого размера с кодом, который не нужен для конечной точки, будет потреблять данные и замедлять передачу.
объекты переноса данных существует в лице традиционной мудрости DonotRepeatYourself. Будьте очень осторожны и абсолютно уверены, что вам нужен DTO
Comments