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

แชร์
ฝัง
  • เผยแพร่เมื่อ 10 พ.ย. 2024

ความคิดเห็น • 126

  • @DmitryAfanasyev
    @DmitryAfanasyev  3 ปีที่แล้ว +54

    Приношу извинения разработчикам с "АСиКью ТикТокера", изо всех сил пытался говорить кратко - не вышло. Сорямба. тиктокеры - го в тикток.
    Остальным - приятного просмотра! 👍

    • @EugenePolischuk
      @EugenePolischuk 3 ปีที่แล้ว +1

      the best author ever!
      Спасибо большое за видосик!!!
      По видосеку увидел, что Махмуд в апиато контроллерах не пробрасывает реквест, а делает деструктуризацию реквеста и передает его как простыми параметрами функций, т.е. по сути это ок, т.к. все остальная логика методов реквеста "купируется" в контроллере и не передается дальше по моделям. А заменить потом примитивы на dto на порядок проще, чем копаться с реквестом в моделя, так что no worries, думаю что дто туда или вернется или появится какая-то моделька.
      DTO можно юзать как метод борьбы с плохим кодом в процессе рефакта, в частности с "одержимостью примитивами" (Фаулер).
      Но на этапе проектирования и кодирования я бы конечно избегал юзания dto в пользу полноценных моделек

    • @c0ntrall472
      @c0ntrall472 ปีที่แล้ว

      Получил архитектурное удовлетворение от просмотра видео! Означает ли это, что мой АСиКью хотя бы чуть выше тиктокера?!

  • @Smiranin
    @Smiranin 3 ปีที่แล้ว +24

    Привет Дмитрий! Сижу смотрю видео и вспоминаю, как 6 лет назад делал первые шаги в программировании и учил php по вашему курсу с магазином. На данный момент работаю Senior Angular Developer в епаме, сам организовываю уже 3-ти курсы у себя в небольшом городе, и хорошо зарабатываю. Хочу Вам во-первых сказать СПАСИБО!!! Что делитесь такой ценной информацией. И второе: что 6 лет назад что сейчас ваши видео очень полезны!

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +5

      Благодарю за отзыв! Очень рад что у вас все хорошо сложилось! Успехов в дальнейшем! 🙏

  • @BopoH_L
    @BopoH_L 2 หลายเดือนก่อน

    Очень содержательное видео с конструктивным разбором и советами применения, спасибо большое! DTO используется наряду с Порто на моем месте работы, в одном из Ташкентских финтехов. Ваши видео кстати входят в обязательное ознакомление в онбординге бекенд разработчиков 😁. Всех благ, не пропадайте

  • @volodymyrvikarchuk247
    @volodymyrvikarchuk247 3 ปีที่แล้ว +7

    Спасибо, что не забываешь о нас👍
    Как всегда приятно тебя видеть. Все четко по теме👍

  • @mihaylo47
    @mihaylo47 ปีที่แล้ว +3

    После 25 минуты можно выключать. Спасибо за видос!

  • @ДмитрийЖунёв-я7г
    @ДмитрийЖунёв-я7г 3 ปีที่แล้ว +3

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

  • @macgrigory
    @macgrigory 3 ปีที่แล้ว +4

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

  • @eleimt
    @eleimt 3 ปีที่แล้ว +2

    Канал в массы. Спасибо за труд.

  • @АлександрМарчелло
    @АлександрМарчелло ปีที่แล้ว +2

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

  • @TheZloySanta
    @TheZloySanta 3 ปีที่แล้ว +1

    Остроумно, весело, содержательно, ёмко, актуально ☝️.

  • @emotional_stuff
    @emotional_stuff ปีที่แล้ว

    прослушал первые 10 сек. подписался. можно вот этого вот почаще

  • @MyFearIsMyBlue
    @MyFearIsMyBlue 2 ปีที่แล้ว +1

    Спасибо, очень понятно, интересно и на примерах.

  • @evgeniiduka634
    @evgeniiduka634 2 ปีที่แล้ว

    Все четко! Создателю респект и благ!

  • @Slavec5
    @Slavec5 3 ปีที่แล้ว +1

    Дима, спасибо за видео, как всегда всё по полочкам

  • @oshastitko
    @oshastitko 7 หลายเดือนก่อน +2

    38:56
    вот не соглашусь с передачей модельки вместо создания её ДТОшной копии. У модели поведение, метод, в который её передают, возьмёт и изменит её состояние через её публичные методы (может, сегодня их нет, завтра добавят, послезавтра забудут, что они значат, а ещё через 3 дня новый девелопер, работающий с подсистемой, куда передали эту модель, возьмёт и дёргнет эти методы, а почему бы и нет, ему же её передали с методами, значит можно дёргать, он формально прав). DTO пресекает эту проблему на корню

  • @StivBike
    @StivBike 3 ปีที่แล้ว

    Спасибо Дмитрий все по делу, так держать и не пропадай, давай больше видео, ты нас мотивируешь

  • @Дольган-т4щ
    @Дольган-т4щ 3 ปีที่แล้ว

    Дмитрий , не пропадай.
    У тебя качественный контент

  • @retvain
    @retvain 3 ปีที่แล้ว

    Ураа, Дмитрий вернулся )

  • @nina_knyazeva
    @nina_knyazeva 2 ปีที่แล้ว +1

    Отличный урок, очень доступное объяснение =) Спасибо)

  • @sovrinfo
    @sovrinfo 3 ปีที่แล้ว

    Спасибо за видео.Коммент в поддержку!

  • @alexanderk8992
    @alexanderk8992 3 ปีที่แล้ว

    О, чувак, ты запилил видос про ДТО))) Классно, спасибо))

  • @EdwardNorthwind
    @EdwardNorthwind 3 ปีที่แล้ว +1

    Нарезки в начале просто бомба)

  • @laradromdaily343
    @laradromdaily343 3 ปีที่แล้ว +1

    Ахаха, Дмитрий, видео огонь! Четко, понятно и с юмором, как всегда! Спасибо, что озвучил свое мнение про проброс реквестов в Апиато. А то я аж присел от неожиданности, когда увидел в 10й версии пропихивание реквеста в Action)).

  • @НиколайКвасов-п5и
    @НиколайКвасов-п5и 3 ปีที่แล้ว

    Дмитрий вернулся, круть :)

  • @andreysivak6404
    @andreysivak6404 3 ปีที่แล้ว

    Дмитрий, спасибо вам огромное!

  • @ringnull
    @ringnull 9 หลายเดือนก่อน

    Лайк заслуженный

  • @modestusmunh93
    @modestusmunh93 3 ปีที่แล้ว

    Здравствуйте! Смотрел ранее ваши видео про Ларавель, за них отдельное спасибо! В начале месяца нашёл свою первую работу в должности разработчика. Без Ларавеля, но на чистом PHP. Попросили изучить DTO и ваше видео прям вовремя вышло. Спасибо за труд!

    • @modestusmunh93
      @modestusmunh93 3 ปีที่แล้ว

      Дмитрий, если позволите, задам вопрос. Из статьи на вики: "The difference between data transfer objects and business objects or data access objects is that a DTO does not have any behavior except for storage, retrieval, serialization and deserialization of its own data (mutators, accessors, parsers and serializers)." Почему мутаторы, аксессоры и парсеры стоят в одном ряду с сериализацией? Ведь первые как раз таки про логику приложения, тогда как сериализация допустима в DTO.

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +1

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

  • @viktornovikov9266
    @viktornovikov9266 ปีที่แล้ว

    За 'чапалах' - отдельный лайк)

  • @the_filin_hub
    @the_filin_hub 2 ปีที่แล้ว +1

    Пожалуйста, воздержитесь от пародирования, я о выражениях «ээ шайтанама» и прочих. Вам просто не идёт это))
    В остальном благодарность, полезные видео у вас 👍

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว +2

      Я родом из Узбекистана - мне можно 😉. Благодарю!

  • @alexbendler943
    @alexbendler943 3 ปีที่แล้ว

    Сначала лайк, потом глядеть)

  • @ОлександрКрученко-п3в
    @ОлександрКрученко-п3в 3 ปีที่แล้ว

    Спасибо. Все чётко и понятно.

  • @resolution07
    @resolution07 ปีที่แล้ว +1

    DTO иммутабельный, поэтому наличие аксессоров - норма. А с повлением readonly все стало проще.

  • @АдептСовиности
    @АдептСовиности 2 ปีที่แล้ว

    подача и сам материал просто 100 лвл
    p.s. 40:10 "kepp it stupid"ахахааххаха прорвало

  • @AnisimovAM
    @AnisimovAM 3 ปีที่แล้ว

    Спасибо :) очень интересно получилось.

  • @ВладимирГончар-и7м
    @ВладимирГончар-и7м 3 ปีที่แล้ว

    Спасибо за ролик.
    В книге "Чистая Архитектура" есть тема про проведение границ. И там упоминалось, что не смотря на то, что поток исполнения идет от контроллера к модели. Модель более важная, так как содержит бизнес логику и должна защищаться от контроллера. Именно поэтому проводится граница между контроллером и операционным слоем (Application layer) и тут используется DTO для передачи данных. Мне кажется это важный нюанс, что DTO используется для передачи данных именно между слоями, и это не относится ко всем службам в целом.
    Для некого калькулятора, период дат скорее является Value Object-ом, а не DTO. Не стоит их путать. В конструкторе периода дат мы можем добавить какие-нибудь проверки и выкинуть исключение + повторно использовать и прокидывать в разные методы.

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Да, под периодом я не дто имел в виду.

  • @misha-pitegorsk
    @misha-pitegorsk 3 ปีที่แล้ว

    Спасибо, Дмитрий! Думал, что забили уже на канал. Мне нравится стиль представления. Пусть там даже прибалтийские акценты будут. Как начинающему, конечно трудновато после просмотра Вашего курса по Ларавель год назад, где всё расжёвывалось с 0-ля, и практикуясь на своих пробных проектах, вникать в шаблоны - сразу большой скачок между уровнями. И, даже немного с опаской ждал новых видео, потому, что каждое показывало сколько ещё всего необходимо изучить и прочувствовать самому на практике. Вот уже тоже приходилось передавать в объекты целые массивы, что оказалось дурной практикой. Теперь, благодаря уроку буду использовать DTO.

  • @corporateaccount9188
    @corporateaccount9188 3 ปีที่แล้ว

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

  • @artemgiant
    @artemgiant 3 ปีที่แล้ว

    Спасибо больше за видео

  • @topalek
    @topalek 3 ปีที่แล้ว

    Дмитрий, что-то Вас давно не было, с возвращением)))

  • @vladsarosek9521
    @vladsarosek9521 10 หลายเดือนก่อน +1

    Ощущение, что DTO нужен, чтобы массивчики посильнее типизировать

  • @alexathe6896
    @alexathe6896 3 ปีที่แล้ว

    Спасибо за видео

  • @beyond6596
    @beyond6596 3 ปีที่แล้ว

    Просто Топ, лучше не найти

  • @vadimsokhatsky2748
    @vadimsokhatsky2748 2 ปีที่แล้ว

    Спасибо!

  • @АндрейМеренков-к8ъ
    @АндрейМеренков-к8ъ 2 ปีที่แล้ว

    29:10 Привет из будущего хоть и не далекого=) Проверил все также как на видео) ПлёхА =(

  • @natalya.provkova2002
    @natalya.provkova2002 3 ปีที่แล้ว

    А если по факту, то мне понравился паттерн и я его реализую в своем проекте, СПАСИБО

  • @nickfist9187
    @nickfist9187 3 ปีที่แล้ว

    Нужен ролик-сборник всех интро к урокам. Будет бомба. Спасибо за уроки!

  • @alexcc333
    @alexcc333 3 ปีที่แล้ว

    Спасибо

  • @artemgiant
    @artemgiant 3 ปีที่แล้ว

    Я жду твои видео как дед мороза на новый год!))))

  • @ПавелРостовцев-з7п
    @ПавелРостовцев-з7п 3 ปีที่แล้ว

    Вот я головой понимаю, что почитать про dto можно на хабре причем ты потратишь 5 минут. Я трачу 41 минуту. Все же классно , Дмитрий, ты рассказываешь :)

  • @АлександрВодоводов-щ8г
    @АлександрВодоводов-щ8г 3 ปีที่แล้ว

    Спасибо! Дмитрий, скажите, а репозитории, описанные в курсе по Laravel, и сервисный слой, это одно и то же (т.к. в некоторых проектах сервисы выполняют и функции работы с БД) или их можно использовать одновременно в контроллерах?

  • @nbrains6380
    @nbrains6380 3 ปีที่แล้ว

    Ребят у меня не было времени сделать это видео короче, поэтому я сделал его длинее. Никлаус Вирт =)

  • @БендерЗадунайский-щ9ы
    @БендерЗадунайский-щ9ы 3 ปีที่แล้ว +1

    ох ёёпт! кто проявился... пол года не было, наверно... работы только наверное много.. пропадаешь так..
    я так хотел по твоим видосам освоить пхп и ооп и ларавель и всё остальное... но проклятый джаваскрипт пришОл и всё испортил :-)
    хотя шаблоны проектирования можно просмотреть наверное.. вот нагрузка джуновская спадёт и займусь. А ты пили видосы хоть иногда! мол жив здоров.. :-) удачи!

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +1

      Летом не зотелось много времени ща пк проводить. Да и на работе сильные перемены произошли - адаптация еще в процессе.

  • @Алексей-н8н6ш
    @Алексей-н8н6ш 2 ปีที่แล้ว

    Дмитрий, а у Вас нет ссылки на репозиторий из данного урока? Хотелось бы посмотреть Ваш код )))

  • @bobaboba3505
    @bobaboba3505 3 ปีที่แล้ว

    Ура Ура Ура

  • @eugenio.vasilev
    @eugenio.vasilev 3 ปีที่แล้ว +2

    Дмитрий, спасибо за интересное видео, с удовольствием посмотрел) Отдельное спасибо за разбор либы. Это интересно.
    Можете рассказать, а в чем отличие DTO от ValueObject?

  • @arvpro8970
    @arvpro8970 2 ปีที่แล้ว

    Можно ли модифицировать данные в DTO, когда он прилетел, к примеру добавить к нему дополнительное поле со значением. Или это уже нарушение концепции?

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว

      Когда он прилетел он выполнил свою задачу. Лучше с ним проститься. (так же как и с реквестом в контроллере)

  • @АнтонРевякин
    @АнтонРевякин 3 ปีที่แล้ว

    Вопрос не по данному видео. На что можно заменить 302 код ответа? Не аякс. Ну например после создания - 201 код можно, а при обновлении, удалении? А то 302 код кэшируется, вот уже 3й раз с ним попадаюсь. то браузер пропускает запрос, а идет далее. Или в Телескоп в Сессии есть success сообщение, но блейд якобы его не видит. Обновляю страницу и еще раз добавляю запись - сообщение с success начинает видеть

    • @chincharovpc4120
      @chincharovpc4120 3 ปีที่แล้ว

      Если ты спрашиваешь какие коды используются, то для обновления - 200,204 , а для удаления 200.

    • @АнтонРевякин
      @АнтонРевякин 3 ปีที่แล้ว

      @@chincharovpc4120 ну для обновления 200 не шло - ругалось, что 200 не для редиректа. Короче оставил по умолчанию, там для тестового задания по быстрому склепал, без аякса, только удаление на аякс, чтоб в списке не тулить формы

  • @ВладимирЧескидов
    @ВладимирЧескидов ปีที่แล้ว

    Не хочу быть душнилой, но
    1) не SPR(эспэр), а SRP (эсэрпи).
    2) static function createFromArray(...) - статическая фабрика
    3) никогда не слышал, чтобы статические фабрики нарушали SRP. Сказать, что статическая фабрика нарушает SRP - то же самое, что сказать, что SRP нарушается перегрузкой конструктора в той же Java.
    4) классы-фабкири DTO объектов называются DtoAssembler-ами и служат чем-то вроде внешнего конструктора для DTO, у которого все свойства публичны
    5) инкапсуляция - не сокрытие данных, а процесс соблюдения инвариантов
    А в целом рад, что такие ролики выходят в русском сегменте Сети. Ты первый, на кого я наткнулся, кто сказал о том, что конструкторы и приватные доступы к свойствам зачастую лишние. Это круто

  • @rudinandrey
    @rudinandrey 3 ปีที่แล้ว +1

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +1

      Не вижу сложностей в соблюдении SRP. Зато видел много сложностей в поддержке кода когда его не соблюдали. Нарушать его можно только при полном понимании последствий.

    • @rudinandrey
      @rudinandrey 3 ปีที่แล้ว

      @@DmitryAfanasyev да согласен в целом, просто с срп растет не файл или класс, а количество файлов. В которых классы делающие чтото одно, как просто так и сложно можно сделать и так и так. Надо делать просто

  • @ЕвгенийАнисимов-ч5э
    @ЕвгенийАнисимов-ч5э 3 ปีที่แล้ว

    Годно, единственное удобней смотреть в скорости воспроизведения 1.5 так как все очень медленно на 1.

  • @salavat_smile
    @salavat_smile ปีที่แล้ว

    На секунду подумал что это java)

  • @rudinandrey
    @rudinandrey 3 ปีที่แล้ว

    Dto4 я описываю $fields = ["id", "name", "addres".... ]; поля в массиве, и потом просто по нему пробегают, тоже самое что и у полей класса брать, но более явно :)

  • @НиколайШи-с9о
    @НиколайШи-с9о 3 ปีที่แล้ว

    Почему run вызывается сразу после app() ? Ide не поймёт же что там за тайпхинт. Лучше через DI в конструктор

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Для тонкого контроллера не критично - всего одно обращение. Зато -1 параметр в методе.

  • @ProsArt
    @ProsArt 2 ปีที่แล้ว

    А как вы называете объекты-сущности? И используете ли вообще такой подход?
    Например, есть DTO - которые собирают набор данных в группу для передачи, есть Model (Laravel) или Entity (Sympfony) - которая описывает данные в БД. Но как быть, когда нам нужно собрать данные в структуру для понятной и удобной работы. Например:
    $armor = new Armor();
    $armor->setCurrentCapacity(95);
    $passenger = new Passenger();
    $passenger->setName('Artem');
    $passenger->setType(PASSENGER_TYPE::CIVIL);
    $passenger->setArmor($armor);
    $car = new Car();
    $car->addPassenger($passenger);
    и допустим эти объекты могут иметь еще с несколько десятков параметров каждый. И допустим ожидается, что планируется еще расширять их в будущем, добавляя новые сущности, например new Weapon(). Добавлять абстракции, когда нам понадобиться несколько видов Armor, несколько видов Passenger и несколько видов Car.
    Чем в таком случае являются объекты Car, Passenger, Armor и в другие ? Model или DTO или что-то третье? Думаю это точно не модель описывающая БД. (Хотя теоретически она может и описывать данные из БД). На DTO это похоже, но DTO представляется несколько проще. Поэтому всегда кажется, что это что-то третье. Но что не могу определить.

    • @ProsArt
      @ProsArt 2 ปีที่แล้ว

      Так, прочитал описание к видео. Похоже мой вопрос про BLO ). Впервые слышу это понятие. Спасибо за ответ)

  • @openvisor7983
    @openvisor7983 3 ปีที่แล้ว

    ну ты индеец))

  • @sifecs8475
    @sifecs8475 3 ปีที่แล้ว

    Возник вопрос тока не ругай меня я в этом ещё новичок.
    Считается если ли нарушением если DTO наследуется от другого класса?.
    Например создал класс BaseDTO там я описал несколько магических методов которые могут повторятся такие как получение данных в разных форматов toArray, создание данных из реквеста моделей и тд и уже ProductDTO extends BaseDTO по сути закон многократного использования сохранятся

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Если в базовый класс вынесены методы представления собственных данных, то норм. Дто содеожащий свойство которое тоже дто - это уже не норм. Забыл об этом упомянуть.

    • @mugen31337
      @mugen31337 3 ปีที่แล้ว

      Лучше кинь это в трейт

  • @davidlakazov9156
    @davidlakazov9156 3 ปีที่แล้ว

    DTO только в котроллерах будет использоваться? Ты хочешь вместо прокидывания параметров передать $request. Я бы не стал делать так потому что контекст может отличаться. Например клиент вводит в форму какие то данные, мы получим обьект $request соответствующий, но вдруг нам стало нужно создать excel документ и контекст совсем другой уже, мы не ждем $request от кого либо и мы просто хотим передать параметры такие же какие могли бы быть в $request. Твой подход способствует дублированию кода.

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +4

      Ты видео смотрел? Где я предлагаю прокидывать реквест? Или ты только нарезку посмотрел?

    • @davidlakazov9156
      @davidlakazov9156 3 ปีที่แล้ว

      @@DmitryAfanasyev на 38 минуте ты сказал "если нет времени может быть можно поставить эту заплатку, может быть это лучше чем передовать 10 параметров в методе". На самом деле не лучше, в первую очередь дублирование искоренять нужно, а потом о параметрах заботится, я это хотел сказать. Параметры вообще такая замарочистая фигня, я лично в работе не парюсь особо за параметры, и не чего страшного не происходит, а вот дублирование очень сильно может испортить жизнь, так как если нужно будет внести правки их придется вносить во все дубли, а ведь можно забыть это сделать и тогда будут косяки которые всплывут не сразу.

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +3

      @@davidlakazov9156 "Ты хочешь вместо прокидывания параметров передать $request"
      Нет, я этого не говорил и не хочу и не советую. Посмотрел 38ю минуту - нет там таких советов. Ты выдумал некую проблему и списал её на меня..... Либо посмотри внимательнее, походу ты что-то не так понял.

  • @КенниМазафак
    @КенниМазафак 3 ปีที่แล้ว

    Дмитрий! Очень нравятся твои видео про шаблоны проектирования, спасибо за то что они есть, я понял некоторые вещи благодаря тебе) Ты проделал большую и ценную работу, обязательно поддержу тебя рублём) Есть два вопроса:
    1) Porto (apiato) open source, так? Ты не думал поучаствовать в этом проекте? Вроде ты здорово разобрался, используешь его в работе и тд, мог бы внести ценный вклад)
    2) К чему акцент и быдло манера в объяснениях? Это местами забавно, но то ли с подачей что-то, то ли слишком часто используется, начало резать ухо.. Складывается впечатление, что это намёк на целевую аудиторию "быдло объяснения для быдлокодеров" :D (это больше обратная связь от одного отдельного человека, чем вопрос)

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +1

      Вряд ли буду когда нибудь участвовать в OS проектах - либо проекты, либо канал. На то и на другое времени точно не найти.

  • @gmaneye
    @gmaneye 3 ปีที่แล้ว

    Как потом DTO использовать / преобразовать дальше модель для дальнейшей передачи в другие сервисы?
    По моему мнению никакой другой сервис, кроме того сервиса, куда мы первично передали DTO не знает и не должен знать что такое DTO, а это означает, что для дальнейшей передачи DTO уже как модели, нужно создать еще одну фабрику.
    Делать 2 фабрики? (Первая - из request в DTO, а потом вторую фабрику из DTO в модель)
    Например, хочется использовать DTO, когда мы проксируем запросы пользователя (тонкая модель, меньше свойств, название свойств отличается) в другой микросервис REST API ( у него толстая модель, больше свойств)

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว +1

      Сразу использовать. Часть данных может стать свойствами принимающего объекта, часть данных будет передана в подобъекты получателя и тп. Главное унифицировать, регламинтировать, оптимизировать передачу/получение. Если оно того стоит.

  • @ИльяСаранчев-е5я
    @ИльяСаранчев-е5я 3 ปีที่แล้ว

    Вопрос пока-что не дающий мне покоя)
    В видосе показан пример DTO только с одной структурой данных, допустим, с тем же продуктом. У продукта мы знаем список полей. Ну и допустим, мы можем забубенить их самым примитивным способом как публичные в классе и передавать.
    А что делать, когда таких структур данных больше? Не только продукт, а еще и, допустим, комментарий, билет на поезд, заявка с формы обратной связи, и так далее.
    - Под каждую структуру делать свой объект DTO, тем самым их размножая под каждую сущность?
    - Или обойтись одним объектом, но которому можно динамически задавать поля? Но если это будет один объект с динамическими полями, как тогда убедиться, что в бизнес логику ушла именно нужная структура?
    Шо делать :D

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Сделать эту структуру в олном классе. Динамические поля точно не надо - лишаемся контроля. Свойства являющиеся доугими dto формально считаются лишним усложнением.

  • @martingerman2457
    @martingerman2457 6 หลายเดือนก่อน

    29 минута - теперь вместо реквеста в метод пробрасывается массив обыкновенный

  • @СергейН-в7в
    @СергейН-в7в 2 ปีที่แล้ว

    15:23 - может SRP а не SPR ?)

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว

      Да, я постоянно это путаю 🙈

    • @СергейН-в7в
      @СергейН-в7в 2 ปีที่แล้ว

      @@DmitryAfanasyev ну эт мелочи....а вот видосики О-О-ОЧЕНЬ информативные и содержательные. Если бы можно было как в тик-токе ставить 100500 лайков...)

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว

      🙏

  • @rudinandrey
    @rudinandrey 3 ปีที่แล้ว

    Dto3 вариант, вот тоже начитаешься этих DDDшников, иммутабельность ) начинаешь все это вот так упаковывать, столько лишнего кода, спрашиваешь себя зачем все это? )))

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Роберт Мартин отвечает на этот вопрос в книге "Чистая архитектура". Где по сути используя ДТО именует его как примитив.

  • @romanbush5164
    @romanbush5164 2 ปีที่แล้ว +1

    Dto это же структура из с# почти

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว

      Исторически из java. C# появился позже.

  • @AsRammstein
    @AsRammstein 3 ปีที่แล้ว

    30:20 я это понял, когда еще mixin для scss/sass писал. это жопа когда у тебя больше 3-х параметров ... Я конечно встречал, когда в функцию передавали по 13-20 параметров ... я думал где они руки пропили ...

    • @kandreyk9159
      @kandreyk9159 3 ปีที่แล้ว +1

      pandas.read_table(filepath_or_buffer, sep=NoDefault.no_default, delimiter=None, header='infer', names=NoDefault.no_default, index_col=None, usecols=None, squeeze=False, prefix=NoDefault.no_default, mangle_dupe_cols=True, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skipinitialspace=False, skiprows=None, skipfooter=0, nrows=None, na_values=None, keep_default_na=True, na_filter=True, verbose=False, skip_blank_lines=True, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, dayfirst=False, cache_dates=True, iterator=False, chunksize=None, compression='infer', thousands=None, decimal='.', lineterminator=None, quotechar='"', quoting=0, doublequote=True, escapechar=None, comment=None, encoding=None, dialect=None, error_bad_lines=None, warn_bad_lines=None, on_bad_lines=None, encoding_errors='strict', delim_whitespace=False, low_memory=True, memory_map=False, float_precision=None)

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Идеально 😁

    • @whatyoumean1498
      @whatyoumean1498 4 หลายเดือนก่อน

      И наверняка в этой функции 1000+ строк?)

  • @vladsarosek9521
    @vladsarosek9521 10 หลายเดือนก่อน

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  10 หลายเดือนก่อน

      Не понятно про сервис и сервисный слой. Укажи пожалуйста тайминг к чему это.

  • @hohoho2180
    @hohoho2180 2 หลายเดือนก่อน

    $request->validated()

  • @mugen31337
    @mugen31337 3 ปีที่แล้ว

    DTO норм тема. Странно что в видео не затронули пакет от спати.

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 ปีที่แล้ว

      Да вроде его и затронул. Вроде как он и был в Апиато когда-то. Успешно ампутировали этот нарост.

    • @mugen31337
      @mugen31337 3 ปีที่แล้ว

      @@DmitryAfanasyev та вроде не было его в апиато. По крайнее мере вы описывали некий пакет pdo в апиато, и охарактеризовали его как нечто адски страшное. У спати пакет прост как гречка, там даже документация на него вмещается на одной странице А4)))

  • @Бетельгейзе-й7х
    @Бетельгейзе-й7х ปีที่แล้ว

    Один собирательный объект. Это ViewModel, а не DTO.

  • @interface200035
    @interface200035 2 ปีที่แล้ว

    На самом деле имхо лучше дольше проговорить и упомянуть побольше ньюансов. Тем более чтоб не тратить труд и время на перезапись ролика.

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว

      Лучше делать так как самому интересно. Ибо как ни старайся придерживаться той или иной концепции - всегда будут не довольные. По этому надо делать "вкайф".

  • @purebloodLT
    @purebloodLT 2 ปีที่แล้ว

    Хм, а куда мой коммент пропал....

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 ปีที่แล้ว

      Либо в спам фильтр либо недолетел если был отправлен с телефона. Врят ли удален, так как если удаляется, то обычно с баном.

    • @purebloodLT
      @purebloodLT 2 ปีที่แล้ว

      @@DmitryAfanasyev я писал, что единственное как можно связать ДТО с анти-паттерном, это анти-паттерн data class. Но сам дядя Боб писал, что есть исключения и data-class не всегда анти-паттерн (Refactoring, 83 стр.)

  • @murtazotoshniyozov4688
    @murtazotoshniyozov4688 8 หลายเดือนก่อน

    It is funny. Lol

  • @natalya.provkova2002
    @natalya.provkova2002 3 ปีที่แล้ว

    ДТО зашквар, а вот реквест норм