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

Поделиться
HTML-код
  • Опубликовано: 5 окт 2024

Комментарии • 126

  • @DmitryAfanasyev
    @DmitryAfanasyev  3 года назад +52

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

    • @EugenePolischuk
      @EugenePolischuk 3 года назад +1

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

    • @c0ntrall472
      @c0ntrall472 10 месяцев назад

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

  • @Smiranin
    @Smiranin 3 года назад +22

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад +4

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

  • @volodymyrvikarchuk247
    @volodymyrvikarchuk247 3 года назад +7

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

  • @eleimt
    @eleimt 3 года назад +2

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

  • @macgrigory
    @macgrigory 3 года назад +4

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

  • @ДмитрийЖунёв-я7г
    @ДмитрийЖунёв-я7г 3 года назад +3

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

  • @BopoH_L
    @BopoH_L Месяц назад

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

  • @TheZloySanta
    @TheZloySanta 2 года назад +1

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

  • @АлександрМарчелло

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

  • @MyFearIsMyBlue
    @MyFearIsMyBlue 2 года назад +1

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

  • @Slavec5
    @Slavec5 3 года назад +1

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

  • @mihaylo47
    @mihaylo47 Год назад +2

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

  • @emotional_stuff
    @emotional_stuff Год назад

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

  • @StivBike
    @StivBike 2 года назад

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

  • @EdwardNorthwind
    @EdwardNorthwind 3 года назад +1

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

  • @evgeniiduka634
    @evgeniiduka634 2 года назад

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

  • @Дольган-т4щ
    @Дольган-т4щ 3 года назад

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

  • @nina_knyazeva
    @nina_knyazeva 2 года назад +1

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

  • @laradromdaily343
    @laradromdaily343 3 года назад +1

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

  • @oshastitko
    @oshastitko 6 месяцев назад +2

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

  • @andreysivak6404
    @andreysivak6404 3 года назад

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

  • @alexanderk8992
    @alexanderk8992 3 года назад

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

  • @sovrinfo
    @sovrinfo 3 года назад

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

  • @retvain
    @retvain 3 года назад

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

  • @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

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

  • @corporateaccount9188
    @corporateaccount9188 3 года назад

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

  • @НиколайКвасов-п5и
    @НиколайКвасов-п5и 3 года назад

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

  • @ОлександрКрученко-п3в

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

  • @misha-pitegorsk
    @misha-pitegorsk 3 года назад

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

  • @АдептСовиности
    @АдептСовиности 2 года назад

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

  • @alexbendler943
    @alexbendler943 2 года назад

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

  • @AnisimovAM
    @AnisimovAM 2 года назад

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

  • @nickfist9187
    @nickfist9187 3 года назад

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

  • @ringnull
    @ringnull 8 месяцев назад

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

  • @viktornovikov9266
    @viktornovikov9266 Год назад

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

  • @vladsarosek9521
    @vladsarosek9521 9 месяцев назад +1

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

  • @ВладимирГончар-и7м
    @ВладимирГончар-и7м 3 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад

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

  • @artemgiant
    @artemgiant 3 года назад

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

  • @resolution07
    @resolution07 Год назад +1

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

  • @topalek
    @topalek 3 года назад

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

  • @the_filin_hub
    @the_filin_hub 2 года назад +1

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад +2

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

  • @eugenio.vasilev
    @eugenio.vasilev 3 года назад +2

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

  • @alexathe6896
    @alexathe6896 3 года назад

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

  • @beyond6596
    @beyond6596 3 года назад

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

  • @ПавелРостовцев-з7п
    @ПавелРостовцев-з7п 3 года назад

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

  • @АндрейМеренков-к8ъ
    @АндрейМеренков-к8ъ 2 года назад

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

  • @natalya.provkova2002
    @natalya.provkova2002 3 года назад

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

  • @artemgiant
    @artemgiant 3 года назад

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

  • @vadimsokhatsky2748
    @vadimsokhatsky2748 2 года назад

    Спасибо!

  • @БендерЗадунайский-щ9ы

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад +1

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

  • @ВладимирЧескидов

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

  • @ЕвгенийАнисимов-ч5э

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

  • @nbrains6380
    @nbrains6380 3 года назад

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

  • @rudinandrey
    @rudinandrey 2 года назад

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

  • @alexcc333
    @alexcc333 3 года назад

    Спасибо

  • @bobaboba3505
    @bobaboba3505 3 года назад

    Ура Ура Ура

  • @rudinandrey
    @rudinandrey 2 года назад +1

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад +1

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

    • @rudinandrey
      @rudinandrey 2 года назад

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

  • @martingerman2457
    @martingerman2457 5 месяцев назад

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

  • @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 формально считаются лишним усложнением.

  • @АлександрВодоводов-щ8г

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

  • @КенниМазафак
    @КенниМазафак 3 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад +1

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

  • @vladsarosek9521
    @vladsarosek9521 9 месяцев назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  9 месяцев назад

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

  • @salavat_smile
    @salavat_smile Год назад

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

  • @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 ). Впервые слышу это понятие. Спасибо за ответ)

  • @hohoho2180
    @hohoho2180 25 дней назад

    $request->validated()

  • @Бетельгейзе-й7х
    @Бетельгейзе-й7х Год назад

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

  • @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 3 месяца назад

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

  • @rudinandrey
    @rudinandrey 2 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

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

  • @Алексей-н8н6ш
    @Алексей-н8н6ш 2 года назад

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

  • @romanbush5164
    @romanbush5164 2 года назад +1

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

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

  • @НиколайШи-с9о
    @НиколайШи-с9о 3 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад

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

  • @arvpro8970
    @arvpro8970 2 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

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

  • @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 года назад

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

    • @chincharovpc4120
      @chincharovpc4120 3 года назад

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

    • @АнтонРевякин
      @АнтонРевякин 3 года назад

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

  • @openvisor7983
    @openvisor7983 2 года назад

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

  • @mugen31337
    @mugen31337 3 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад

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

    • @mugen31337
      @mugen31337 3 года назад

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

  • @sifecs8475
    @sifecs8475 3 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  3 года назад

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

    • @mugen31337
      @mugen31337 3 года назад

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

  • @interface200035
    @interface200035 2 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

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

  • @СергейН-в7в
    @СергейН-в7в 2 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

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

    • @СергейН-в7в
      @СергейН-в7в 2 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

      🙏

  • @purebloodLT
    @purebloodLT 2 года назад

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  2 года назад

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

    • @purebloodLT
      @purebloodLT 2 года назад

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

  • @murtazotoshniyozov4688
    @murtazotoshniyozov4688 7 месяцев назад

    It is funny. Lol

  • @natalya.provkova2002
    @natalya.provkova2002 3 года назад

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