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

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

КОМЕНТАРІ • 36

  • @ilyalisov5284
    @ilyalisov5284 9 місяців тому +1

    спасибо большое за видео, много знал, однако услышал и много интересного и полезного!

  • @amalnishanaliev3142
    @amalnishanaliev3142 4 місяці тому

    Кайфанул прям, Спасибо огромное :)

  • @MiSaxap
    @MiSaxap 9 місяців тому

    Спасибо

  • @oleksandrvasylchenko316
    @oleksandrvasylchenko316 6 місяців тому +3

    Перешли на рекорды, по сути те же POJO, но красивее и быстрее. Мапстракт отлично справляется, забыл уже когда писал хоть какойто мапинг. Для сериализации десериализации юзаем уже моделМаппер Jackson, удобно, легко мапит и снейк_кейс и камелКейс. Jakcson с версии 2.15 с рекордами работает.

  • @oleksandrvasylchenko316
    @oleksandrvasylchenko316 6 місяців тому

    Отличный кодлад

  • @kotpodlampoi
    @kotpodlampoi 2 місяці тому

    спасибо большое, было познавательно, от себя добавлю что mybatis + ломбок достаточно хорошо решает данные проблемы так как с используем подход pojo и pojo filter extend pojo

  • @opalev
    @opalev 9 місяців тому

    37:53 Проекции, тут получается, что мы можем только одно вычисляемое поле добавить таким способом, так ведь?

  • @user-bv3tn2xz3i
    @user-bv3tn2xz3i 9 місяців тому

    Record, Java движется в сторону трансформации в Delphi :)

  • @anti1am3r
    @anti1am3r 9 місяців тому +15

    Итого jpa создает больше проблем, чем решает

    • @57skies
      @57skies 9 місяців тому +2

      can not agree more! we use raw jdbc for at least 10 years now, we do not miss any jpa/hibernate at all

  • @dimzinnatov7242
    @dimzinnatov7242 2 місяці тому +1

    Сочувствую Вам ребята((
    Не думал, что в Java так шатко работать с данными

    • @sanberen
      @sanberen 2 місяці тому

      В этом вся суть

  • @user-mj6tf8dc1d
    @user-mj6tf8dc1d 9 місяців тому +5

    У нас Kotlin, мы трансформации (mapping) производим в контроллерах либо extension функции, либо отдельные классы-мапперы, если нужно закинуть зависимости. Смотрю на MapStruct, выглядит как-то тяжеловеснее или примерно так же, как инстанциирование классов в Kotlin. Вывод от себя, в Kotlin MapStruct - это пятое колесо

    • @AlekseyStukalov
      @AlekseyStukalov 9 місяців тому

      А какая разница где? Все равно писать миллион присваиваний где то надо. Мапстракт справляется именно с этим. А позвать его можно и из экстеншен функции... Это ради бога.

    • @user-mj6tf8dc1d
      @user-mj6tf8dc1d 9 місяців тому

      @@AlekseyStukalov так о том-то и речь, что он, конечно, справляется... но
      1. Кода в котлин я напишу +- столько же по количеству, сколько в мапстракт
      2. В мапстракт вот эта история с описанием вычисляемых полей на EL ещё и несёт риск того, что при будущем рефакторинге IDE может либо просто на этот EL положить, либо криво его зарефачить. А если не дай бог препроцессору IDE вообще плевать на этот EL, то ошибки мы собирать уже будем в рантайм

    • @AlekseyStukalov
      @AlekseyStukalov 9 місяців тому

      ​ @user-mj6tf8dc1d
      1. Да ладно? А можно посмотреть маппинг графа, например глубиной 3, по 5 аттрибутов на каждой сущности? Мапстракт как раз весь этот код аккуратненько генерит.
      2. Так EL то вообще не обязательно использовать. Пишите вычисляемые поля сразу в себя в DTO или на уровне сущности транзиентными полями и все помапится прекрасно. Это слабый аргумент ИМХО.

    • @uivadim
      @uivadim 3 місяці тому

      Очень просто, экстеншен функции для маппинга копятся постепенно. Таким образом во вложенном атрибуте вызываешь его функцию для маппинга

  • @TheMaliciousMan
    @TheMaliciousMan 9 місяців тому +2

    Кто-то еще произносит DTO как "ди-ти-о"? У нас в офисе все всегда произносили просто как "дто")

    • @user-mj6tf8dc1d
      @user-mj6tf8dc1d 9 місяців тому +1

      Да, особенно когда с иностранцами общаешься, иначе беда 🙂

    • @AlekseyStukalov
      @AlekseyStukalov 9 місяців тому

      У меня такая деформация. И, например, "Джи Даблью Ти" вместо ГВТ. Это зависит от того какой язык рабочий англ или рус.

  • @tauren46
    @tauren46 9 місяців тому +2

    когда пофиксят работу Jackson с record'ами тогда можно на них и перейти

    • @oleksandrvasylchenko316
      @oleksandrvasylchenko316 6 місяців тому +1

      Сверсии 2.15 все прекрасно работает

    • @tauren46
      @tauren46 6 місяців тому

      @@oleksandrvasylchenko316 и со снейк кейса нормально читает? именно с этим проблемы были

  • @VovkaU5
    @VovkaU5 9 місяців тому +2

    Что мешает писать руками конвертеры и не усложнять себе жизнь ненужными надстройками?

    • @AlekseyStukalov
      @AlekseyStukalov 9 місяців тому +1

      На самом деле ничего не мешает. Кроме дальнейшего мейтененса.

  • @bananasba
    @bananasba 9 місяців тому +1

    И в чем же профит этих мапперов, если нормальных проекций из базы в джаве так и не появилось

    • @Longmanrus
      @Longmanrus 9 місяців тому +4

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

    • @bananasba
      @bananasba 9 місяців тому +2

      @@Longmanrus о да, просто супер фича

  • @ivan42832
    @ivan42832 5 місяців тому

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

    • @user-hq6nm2tf6j
      @user-hq6nm2tf6j 4 місяці тому

      как раз в энтерпрайзах это и используется. Когда их за сотни маппингов. Тип и имя совпали и ничего делать не надо. И когда в объекте пару десятков полей, при ручном маппинге вообще каша читаемости будет

  • @UniXoiD69
    @UniXoiD69 9 місяців тому +4

    Только рекорды и создание руками. Всё остальное... Либы, ломбок - безумие.

    • @ivanjermakov
      @ivanjermakov 9 місяців тому +5

      Удобно, пока нет сущностей со 150ю полями..