Андрей Беляев - DTO: живи быстро, гори ярко

  Рет қаралды 16,508

JPoint, Joker и JUG ru

JPoint, Joker и JUG ru

8 ай бұрын

Ближайшая конференция - Joker 2024, 9 октября (Online), 15-16 октября, Санкт-Петербург
- -
DTO - один из самых простых паттернов проектирования. Но в реальном мире аббревиатурой DTO называют разные виды объектов. В докладе рассмотрим, зачем нужны DTO, где их можно использовать и какие средства работы с ними бывают. Разберемся, сколько трансформаций могут пройти данные на пути от базы до API и обратно, какие бывают особенности маппинга данных при помощи разных структур и сколько видов проекций есть в ORM.
Презентация к докладу: squidex.jugru.team/api/assets...
#java #dto

Пікірлер: 36
@MiSaxap
@MiSaxap 8 ай бұрын
Спасибо
@ilyalisov5284
@ilyalisov5284 8 ай бұрын
спасибо большое за видео, много знал, однако услышал и много интересного и полезного!
@amalnishanaliev3142
@amalnishanaliev3142 3 ай бұрын
Кайфанул прям, Спасибо огромное :)
@oleksandrvasylchenko316
@oleksandrvasylchenko316 4 ай бұрын
Перешли на рекорды, по сути те же POJO, но красивее и быстрее. Мапстракт отлично справляется, забыл уже когда писал хоть какойто мапинг. Для сериализации десериализации юзаем уже моделМаппер Jackson, удобно, легко мапит и снейк_кейс и камелКейс. Jakcson с версии 2.15 с рекордами работает.
@opalev
@opalev 8 ай бұрын
37:53 Проекции, тут получается, что мы можем только одно вычисляемое поле добавить таким способом, так ведь?
@oleksandrvasylchenko316
@oleksandrvasylchenko316 4 ай бұрын
Отличный кодлад
@kotpodlampoi
@kotpodlampoi Ай бұрын
спасибо большое, было познавательно, от себя добавлю что mybatis + ломбок достаточно хорошо решает данные проблемы так как с используем подход pojo и pojo filter extend pojo
@user-bv3tn2xz3i
@user-bv3tn2xz3i 8 ай бұрын
Record, Java движется в сторону трансформации в Delphi :)
@dimzinnatov7242
@dimzinnatov7242 Ай бұрын
Сочувствую Вам ребята(( Не думал, что в Java так шатко работать с данными
@sanberen
@sanberen Ай бұрын
В этом вся суть
@user-mj6tf8dc1d
@user-mj6tf8dc1d 8 ай бұрын
У нас Kotlin, мы трансформации (mapping) производим в контроллерах либо extension функции, либо отдельные классы-мапперы, если нужно закинуть зависимости. Смотрю на MapStruct, выглядит как-то тяжеловеснее или примерно так же, как инстанциирование классов в Kotlin. Вывод от себя, в Kotlin MapStruct - это пятое колесо
@AlekseyStukalov
@AlekseyStukalov 8 ай бұрын
А какая разница где? Все равно писать миллион присваиваний где то надо. Мапстракт справляется именно с этим. А позвать его можно и из экстеншен функции... Это ради бога.
@user-mj6tf8dc1d
@user-mj6tf8dc1d 8 ай бұрын
@@AlekseyStukalov так о том-то и речь, что он, конечно, справляется... но 1. Кода в котлин я напишу +- столько же по количеству, сколько в мапстракт 2. В мапстракт вот эта история с описанием вычисляемых полей на EL ещё и несёт риск того, что при будущем рефакторинге IDE может либо просто на этот EL положить, либо криво его зарефачить. А если не дай бог препроцессору IDE вообще плевать на этот EL, то ошибки мы собирать уже будем в рантайм
@AlekseyStukalov
@AlekseyStukalov 8 ай бұрын
​ @user-mj6tf8dc1d 1. Да ладно? А можно посмотреть маппинг графа, например глубиной 3, по 5 аттрибутов на каждой сущности? Мапстракт как раз весь этот код аккуратненько генерит. 2. Так EL то вообще не обязательно использовать. Пишите вычисляемые поля сразу в себя в DTO или на уровне сущности транзиентными полями и все помапится прекрасно. Это слабый аргумент ИМХО.
@uivadim
@uivadim 2 ай бұрын
Очень просто, экстеншен функции для маппинга копятся постепенно. Таким образом во вложенном атрибуте вызываешь его функцию для маппинга
@TheMaliciousMan
@TheMaliciousMan 8 ай бұрын
Кто-то еще произносит DTO как "ди-ти-о"? У нас в офисе все всегда произносили просто как "дто")
@user-mj6tf8dc1d
@user-mj6tf8dc1d 8 ай бұрын
Да, особенно когда с иностранцами общаешься, иначе беда 🙂
@AlekseyStukalov
@AlekseyStukalov 8 ай бұрын
У меня такая деформация. И, например, "Джи Даблью Ти" вместо ГВТ. Это зависит от того какой язык рабочий англ или рус.
@anti1am3r
@anti1am3r 8 ай бұрын
Итого jpa создает больше проблем, чем решает
@57skies
@57skies 8 ай бұрын
can not agree more! we use raw jdbc for at least 10 years now, we do not miss any jpa/hibernate at all
@tauren46
@tauren46 8 ай бұрын
когда пофиксят работу Jackson с record'ами тогда можно на них и перейти
@oleksandrvasylchenko316
@oleksandrvasylchenko316 4 ай бұрын
Сверсии 2.15 все прекрасно работает
@tauren46
@tauren46 4 ай бұрын
@@oleksandrvasylchenko316 и со снейк кейса нормально читает? именно с этим проблемы были
@VovkaU5
@VovkaU5 8 ай бұрын
Что мешает писать руками конвертеры и не усложнять себе жизнь ненужными надстройками?
@AlekseyStukalov
@AlekseyStukalov 8 ай бұрын
На самом деле ничего не мешает. Кроме дальнейшего мейтененса.
@bananasba
@bananasba 8 ай бұрын
И в чем же профит этих мапперов, если нормальных проекций из базы в джаве так и не появилось
@Longmanrus
@Longmanrus 8 ай бұрын
ты о чем? из репозитория можно доставать данные не только сущностей но и любой дто. Главное чтобы типы и названия полей совпадали. другое дело что это не используют ибо нужно будет слишком много этих методов делать для каждой дто. Проще достать основную сущность и замапить ее в нужное.
@bananasba
@bananasba 8 ай бұрын
@@Longmanrus о да, просто супер фича
@ivan42832
@ivan42832 3 ай бұрын
Мапперы вообще унылая возня, на порядок проще и удобнее и понятнее и быстрее обычным присваиванием делать. Я понимаю если требуется по 10 сайтов клепать в день, тогда можно эти инструменты использовать, но когда у вас ентерпрайс что вы выиграете этой возней
@user-hq6nm2tf6j
@user-hq6nm2tf6j 2 ай бұрын
как раз в энтерпрайзах это и используется. Когда их за сотни маппингов. Тип и имя совпали и ничего делать не надо. И когда в объекте пару десятков полей, при ручном маппинге вообще каша читаемости будет
@UniXoiD69
@UniXoiD69 8 ай бұрын
Только рекорды и создание руками. Всё остальное... Либы, ломбок - безумие.
@ivanjermakov
@ivanjermakov 8 ай бұрын
Удобно, пока нет сущностей со 150ю полями..
Follow @karina-kola please 🙏🥺
00:21
Andrey Grechka
Рет қаралды 15 МЛН
Когда на улице Маябрь 😈 #марьяна #шортс
00:17
How To Choose Ramen Date Night 🍜
00:58
Jojo Sim
Рет қаралды 52 МЛН
Максим Морев - DDD в действии
51:54
JPoint, Joker и JUG ru
Рет қаралды 9 М.
DTO - Data Transfer Object паттерн в JavaScript / PHP / C#
18:05
Максим Гром
Рет қаралды 3,6 М.
Airpods’un Gizli Özelliği mi var?
0:14
Safak Novruz
Рет қаралды 3,7 МЛН
🤯Самая КРУТАЯ Функция #shorts
0:58
YOLODROID
Рет қаралды 3,5 МЛН
❌УШЛА ЭПОХА!🍏
0:37
Demin's Lounge
Рет қаралды 365 М.
Он Отказался от БЕСПЛАТНОЙ видеокарты
0:40
ЖЕЛЕЗНЫЙ КОРОЛЬ
Рет қаралды 1,8 МЛН
M4 iPad Pro Impressions: Well This is Awkward
12:51
Marques Brownlee
Рет қаралды 6 МЛН
Google I/O 2024 - ИИ, Android 15 и новые Google Glass
22:47