DTO (Data Transfer Object) ► Шаблон проектирования Урок №21

Описание к видео DTO (Data Transfer Object) ► Шаблон проектирования Урок №21

DTO (Data Transfer Object) - Объект передачи данных
DTO - это объект который переносит данные между системами (веб-сервисы, подсистемы или процессы одного приложения)

Оглавление:
00:00 Начало
01:07 Определение, история возникновения шаблона
05:55 Варианты реализации DTO в PHP
18:05 Варианты использования DTO (Laravel или любой другой фреймворк)
23:25 Изменения в Apiato (Porto) - исчезло использование DTO
30:08 Притянули Роберта Мартина
32:21 Про критику DTO

Шаблон проектирования DTO изначально был придуман для решения проблемы передачи данных между системами (веб-сервисами).
Первичная цель DTO заключалась в передаче данных при дорогостоящих удаленных вызовах. Вместо нескольких вызовов и передачи нескольких объектов делается один вызов и передается один собирательный объект.
Так же решаются проблемы:
- Ошибки при сериализации передаваемых объектов
- Сложная многоуровневая структура объектов
- Ненужные (излишние) для передачи данные

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

Злоупотребления использования DTO:
- Избыточность. Есть объект бизнес-логики (BLO), и есть DTO его представляющий. Может получиться так что единственным отличием между ними будет только то, что объект DTO не содержит поведения. Это приводит и к усложнение архитектуры приложения и к дополнительным затратам на написание кода.
- Использование DTO внутри одного слоя (не для передачи между системами, а внутри системы)
- Использование одного DTO как свойства другого DTO (усложнение понимания структуры)
- Использование одного огромного DTO для передачи в представление
- Использование DTO для методов с большим количеством параметров

Злоупотребления использования DTO:
- Избыточность. Есть объект бизнес-логики (BLO), и есть DTO его представляющий. Может получиться так что единственным отличием между ними будет только то, что объект DTO не содержит поведения. Это приводит и к усложнение архитектуры приложения и к дополнительным затратам на написание кода.
- Использование DTO внутри одного слоя (не для передачи между системами, а внутри системы)
- Использование одного DTO как свойства другого DTO (усложнение понимания структуры)
- Использование одного огромного DTO для передачи в представление
- Использование DTO для методов с большим количеством параметров

Литература:
https://martinfowler.com/eaaCatalog/d...
https://en.wikipedia.org/wiki/Data_tr...
https://ru.wikipedia.org/wiki/DTO
https://web.archive.org/web/200411180...
https://stackoverflow.com/questions/1...
https://web.archive.org/web/200805270...

#laravel #dto #шаблоны_проектирования #design_patterns
*
★ Автор: Дмитрий Афанасьев.
★ Канал: https://clck.ru/JVYct
*
► Выразить благодарность, поддержать донатом развитие канала.
★ https://www.tinkoff.ru/rm/afanasev.dm...
★ https://www.donationalerts.ru/r/dmitr...
*
► Еще интересные курсы:
★ Видеокурс по Laravel: https://clck.ru/JVYa2
★ Видеокурс по Git: https://clck.ru/JVYYm
★ Объяснение SOLID: https://clck.ru/JVYXq
★ Шаблоны проектирования: https://clck.ru/JVYX7
★ Структурные шаблоны проектирования: https://clck.ru/TVB9Y
★★★ Все курсы → https://clck.ru/JVYVd

Комментарии

Информация по комментариям в разработке