Стратегия. Strategy ► Шаблон проектирования ► Урок №10

Поділитися
Вставка
  • Опубліковано 14 жов 2024
  • Стратегия - это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми. В этом видео мы рассмотрим шаблон проектирования Strategy (Стратегия) с примерами на php.
    #шаблоны_проектирования #design_patterns #strategy
    *
    ★ Автор: Дмитрий Афанасьев.
    ★ Телеграм с новостями: t.me/i640kb
    ★ Канал: clck.ru/JVYct
    *
    ► Выразить благодарность, поддержать донатом развитие канала.
    ★ www.tinkoff.ru...
    ★ www.donational...
    *
    ► Еще интересные курсы:
    ★ Видеокурс по Laravel: clck.ru/JVYa2
    ★ Видеокурс по Git: clck.ru/JVYYm
    ★ Объяснение SOLID: clck.ru/JVYXq
    ★ Шаблоны проектирования: clck.ru/JVYX7
    ★ Структурные шаблоны проектирования: clck.ru/TVB9Y
    ★★★ Все курсы → clck.ru/JVYVd
    *
    ► Обязательно к изучению любому разработчику
    ★ www.ozon.ru/ca...
    ★ www.chitai-gor...

КОМЕНТАРІ • 48

  • @DmitryAfanasyev
    @DmitryAfanasyev  5 років тому +6

    ⚝⚝⚝ Покровители канала:
    ► Константин [ ⚝⚝ Меценат ]
    Сообщение: "Спасибо за отличные уроки по Laravel";
    Сообщение2: "Материал такого уровня можно смело продавать, а вы дарите бесплатно. Не могу пройти мимо и не поддержать ещё раз";
    .
    ► Алексей Пустоутов
    Сообщение: "Хотелось бы шаблон Стратегия))) Писал пару раз в комментах. Спасибо вам"
    .
    ► Аким
    Сообщение: "Дмитрий, привет! Спасибо огромное за крутой курс по Laravel, весь еще не прошел. Вопрос: есть форма загрузки csv...";
    .
    ► Александр Дера
    Сообщение: "...И теперь у меня к вам вопрос: занимаетесь ли вы менторством? Если да, то свяжитесь со мной удобным для вас способом. VK, facebook...";
    .
    ► Mordwin
    Сообщение: "Спасибо за контент. Устроюсь на нормальную работу - подкину больше)";
    .
    ► Александр Мельник
    Сообщение: "Вы снимаете классные уроки, спасибо.";
    .
    ► Дмитрий
    Сообщение: "На кусочек провода для нового света :) Огромное спасибо за laravel курс! Помимо всего полезного оч порадовало то, что видео не сухие, есть какие-то отступления, шутки. Но… Я поленился и сам закодил далеко не всё. Хотелось бы получить последние исходники (Laravel, урок №50). Email ****"
    .
    ► Алексей Сукач
    Сообщение: "Спасибо за уроки. Надеюсь, не забросишь)"
    .
    ► Lavr
    Сообщение: "Большое спасибо за канал!"
    .
    ► Павел Пожетнов
    Сообщение: ""
    .
    ► Александр
    Сообщение: "С нетерпением жду продолжения!!!";
    .
    ► Алексей Украинцев
    Сообщение: "Спасибо за курс жду продолжения, особенно на тему пользовательских ролей";
    .
    ► Александр
    Сообщение: "Дмитрий не бросайте начатое! Большое спасибо за то что вы уже сделали! ИМХО отличная подача материала и разъяснения. Буду ждать продолжения.";
    .
    ► Николай Савин
    Сообщение: "Спасибо за знания";
    .
    ► Аноним
    Сообщение: "Спасибо за курс, особенно нравится материал про архитектуру приложения.";
    .
    ► Yoyshinoda
    Сообщение: "Спасибо за видеокурс по Laravel ( уже появилось желание просмотреть другие). Благодаря этому курсу очень легко ощущаю себя в переходе с C++/C# (Пара-тройка лет в коммерческих проектах) на php. Из пожеланий, с удовольствием, бы просмотрел некий ваш личный топ литературы по этому делу";
    .
    ► Аноним
    Сообщение: "Для поднятия настроения";
    .
    ► NGL Biathlon
    Сообщение: Большое спасибо за курсы!";
    .
    ► Иван
    .
    ► Tetragrammaton
    Сообщение: "Дмитрий, спасибо за вашу работу.";
    .
    ► Oleg Yurchenko
    Сообщение: "Спасибо! Пили видосы чаще! SeriousSloth";
    .
    ► Аноним
    Сообщение: "Хотелось бы чтобы почаще видео были";
    .
    ► Дмитрий Лейко
    Сообщение: "Спасибо за уроки!!! Удачи!";
    .
    ► Andrew
    Сообщение: "На пиуко) P.S. Спасибо за крутой курс!";
    .
    ► Виталий Котов
    Сообщение: "Привет! Спасибо за видео, но к сожалению застрял в самом начале, не могу двигаться дальше, интернет перерыл, но по английски я не очень(что бы читать форумы), а по русски не нашел ничего, а что нашел, то не работает. Ответь пожалуйста на мой вопрос..";
    .
    ► Паша Гудман
    Сообщение: "Не так давно наткнулся на ваш канал с целью грамотного подхода к изучению Laravel и, в целом, процесса разработки. Спасибо за то, что вы делаете. Удачи в вашем деле.";
    .
    ► Ярослав;
    .
    ► Дмитрий
    Сообщение: "Спасибо за уроки, смотрю параллельно еще курс, такой нудный в отличие от твоего, так держать"
    ;
    .
    ► Руслан Васильчиков
    Сообщение: "Наконец-то я продвинулся дальше миграций в изучении Laravel. ** * как-то не зашел ;)"
    ;
    .
    ► Александр;
    .
    ► Бахтиёр
    ;
    Спасибо за поддержку, друзья!;

  • @bobpps
    @bobpps 5 років тому +6

    Огромнейшее спасибо за Ваш труд!

  • @prod.wembley3816
    @prod.wembley3816 2 роки тому

    Оказалось в роликах намного доступнее чем в статьях. Спасибо огромное.

  • @alex331911
    @alex331911 5 років тому +1

    Ураааа! Спасибо огромнейшее! От всей души!

  • @alexbendler943
    @alexbendler943 2 роки тому

    Спасибо!

  • @Bisirsky
    @Bisirsky 2 роки тому +1

    Классно. Буду ещё смотреть, хотя на php не работаю, но это неважно благодаря максимально универсальным объяснениям. Спасибо!

  • @sovrinfo
    @sovrinfo 3 роки тому

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

  • @aleksejnikolaev8618
    @aleksejnikolaev8618 5 років тому +1

    Безразмерная благодарность Дмитрий, за благое дело 😉

  • @ЯрославАндроид-й7ч
    @ЯрославАндроид-й7ч 5 років тому +1

    Спасибо, как всегда полезно 💪👍

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

    Работал бы с таким напарником в проекте

  • @alexanderk4481
    @alexanderk4481 2 роки тому

    Thanks )

  • @darkshaman766
    @darkshaman766 5 років тому +1

    замечательный шаблон

  • @ВалерияК-й1й
    @ВалерияК-й1й Рік тому

    👍

  • @АндрейГузич-ф3д

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

  • @resolution07
    @resolution07 Рік тому +1

    6:18 за такие неявные подключения мне били по руками. Не проще вынести в конфиги?

    • @DmitryAfanasyev
      @DmitryAfanasyev  Рік тому +1

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

    • @resolution07
      @resolution07 Рік тому

      @@DmitryAfanasyev был кейс когда конфиг для подобного функционала запихали в конфиг лары... Идея с отдельным классом-конфигуратором - классная. Возьму на вооружение.

  • @dmitryocheretko703
    @dmitryocheretko703 4 роки тому

    спасибо

  • @vesh95
    @vesh95 2 роки тому

    Посмотрел до половины и понял, что это лучший пример стратегии.
    Не смотря на реализацию способа выбора стратегии (я бы лучше классмап сделал).
    Особо мне понравилось с методом getName. Мало кто подумает, что классу может понадобиться давать обратную связь и позволять идентифицировать себя.

  • @AlexeypopoW4
    @AlexeypopoW4 4 роки тому

    Спасибо тебе за твои труды!!)

  • @АлександрКалиберда-ч1ъ

    Будет ли возможность получить ваши исходники?

  • @alex331911
    @alex331911 5 років тому

    Дмитрий здравствуйте! Можете снять ролик о принципе единой ответственности с точки зрения конструирование объекта и учёта контекста задачи. Также о том как разбивать программу на модули и где должны между модулями проходить границы.
    Ну например у меня есть модуль отпуска сотрудников. Это список отпусков и подача заявки на отпуск. Далее там есть разные проверки по оставшимся дням и прочими историями. Но вот задача усложняется тем что эти отпуска должны утверждаться его начальником, либо несколькими начальника и сразу. По идее на такую конструкцию утверждения должны быть вынесены в отдельный модуль. Так как утверждать в будущем можно будет и командировки и другие объекты.
    Как прав льно проектировать классы для такой системы и модули. Какие интерфейсы и где создать. Я прям проспонсирую такой ролик. Вообще хотел бы попросит я к вам на индивидуальные занятия

  • @agnar878
    @agnar878 Рік тому

    А в чем разница с фабрикой? В примере порождается один из классов который расчитывает ЗП. Почему поведеньческий? Тут типичная фабрика классов. Ваши видео смотрю, интересно. Но есть вопросы

    • @KichatovAY
      @KichatovAY Рік тому

      Стратегия - это про несколько классов, решающих одну и ту же задачу разными путями. Порождение объектов сюда не входит.
      Т.е. метод getStrategyByUser() не относится к стратегии, это действительно скорее фабрика, которую для простоты не стали выносить в отдельный класс.

  • @Artem-up5xw
    @Artem-up5xw 4 роки тому

    Лайк, подписка, респект )))

  • @eugenesasin2757
    @eugenesasin2757 4 роки тому +2

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

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      Возможно. Но из вышесказанного - один подход не противоречит другому.

    • @eugenesasin2757
      @eugenesasin2757 4 роки тому

      ​@@DmitryAfanasyev Это похоже на микроскоп и гвозди.

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

      @@eugenesasin2757 Отличное пояснение....

    • @eugenesasin2757
      @eugenesasin2757 4 роки тому

      @@DmitryAfanasyev Это не троллинг. Я пытаюсь разобраться в паттернах и ваши видео мне очень помогают. Спасибо за вашу работу!

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому

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

  • @eaglesm1993
    @eaglesm1993 5 років тому +1

    Делаю проект, в котором есть оформление заказа в 4 шага, с налогами, товарами, с выводом данных стоимости заказа на каждом шаге, к тому же нужно переиспользовать это чтобы выводить данные о уже соершенном заказе в админке, и в кабинете пользователя, есть условия от которых могу меняться цена авто, локации, и еще парочка интересных моментов. Вот вроде все понятно по паттернам, использую репозитории, хелперы, менеджеры, но все равно ощущение что я какую то дичь написал, я сам не могу увидеть всю картину в общем, приходится постоянно вспоминать как я построил логику. Капец просто.

    • @DmitryAfanasyev
      @DmitryAfanasyev  5 років тому +2

      Как вариант. Погугли pipes в laravel. Делаешь джоб, запускаешь транзакцию, прогоняешь модель заказа и пришедшие данные через пайппы - каждый пайп - это сохранение какого-то момента в заказе. При удаче коммит, при неудаче ролбак. Пусть джоб кушает не реквест получая из него данные, а либо ДТО, ну либо тупо массив. Плюсы - 1) сохранение заказ откуда угодно - из команды, из админки, из сайта. 2) простое включение или выключение доп нюансов сохранения путем добавления пайпов. Пайпы же реализуют какой-то шаблон проектирования - цепочка или что-то такое - на вскидку не помню.

    • @eaglesm1993
      @eaglesm1993 5 років тому

      @@DmitryAfanasyev Погуглил пайпы, классная штука, буду использовать в следующих проектах. Там с сохранением в целом проблем нет, там скорее трабл что четыре шага, это отдельные страницы, и для каждой страницы нужно не только посчитать сумму текущего этапа + сумму предыдущих, но и вывести сумму каждой сущности отдельно. А там почти у каждой сущности есть условия: процентное значение или нет, и зависит от количества дней аренды(авто), тут в общем то в этом сложность) Вроде сделал, и + - нормально, дальше по обстоятельствам буду рефакторить.

    • @eaglesm1993
      @eaglesm1993 5 років тому

      @@DmitryAfanasyev Все таки применил пайпы, они выступили в роли модификаторов цен для разных сущностей, вместе с тем, при модификации цены, в свойство модели записывается класс - информер для получения информации о примененных модификаторах: арифметическая операция, сумма, название(информативность), и сама сущность которая стала причиной смены цены, все на интерфейсах и трейтах. Пайпы классная штука, главное не начать их применять где нужно и где нет)

  • @ЭдуардЕвдокимов-й1о

    Что-то уж сильно похож данный шаблон на делегирование. Прям один в один. Или я чет не понял?

  • @kostyaanisimov5431
    @kostyaanisimov5431 3 роки тому

    «Мухи отдельно, котлеты отдельно» как это вбить голову нашему тимлиду?

  • @christianblacky67
    @christianblacky67 4 роки тому

    исходник где?)))

    • @DmitryAfanasyev
      @DmitryAfanasyev  4 роки тому +1

      Туть ua-cam.com/video/Hz7U5XiPkkg/v-deo.html

  • @artemtaylor669
    @artemtaylor669 3 роки тому +1

    Какой же я всё-таки тупой, хоспаде.

  • @АндрейИльин-д6ж
    @АндрейИльин-д6ж Рік тому +1

    нафига тебе на рабочем столе говорящая голова?

  • @goqorgrigoryan4520
    @goqorgrigoryan4520 4 роки тому

    что с левым глазом ? ))))

  • @noname-nonaymich
    @noname-nonaymich 4 роки тому

    Спасибо!