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

Поделиться
HTML-код
  • Опубликовано: 5 авг 2019
  • Стратегия - это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми. В этом видео мы рассмотрим шаблон проектирования Strategy (Стратегия) с примерами на php.
    #шаблоны_проектирования #design_patterns #strategy
    *
    ★ Автор: Дмитрий Афанасьев.
    ★ Телеграм с новостями: t.me/i640kb
    ★ Канал: clck.ru/JVYct
    *
    ► Выразить благодарность, поддержать донатом развитие канала.
    ★ www.tinkoff.ru/rm/afanasev.dm...
    ★ www.donationalerts.ru/r/dmitr...
    *
    ► Еще интересные курсы:
    ★ Видеокурс по Laravel: clck.ru/JVYa2
    ★ Видеокурс по Git: clck.ru/JVYYm
    ★ Объяснение SOLID: clck.ru/JVYXq
    ★ Шаблоны проектирования: clck.ru/JVYX7
    ★ Структурные шаблоны проектирования: clck.ru/TVB9Y
    ★★★ Все курсы → clck.ru/JVYVd
    *
    ► Обязательно к изучению любому разработчику
    ★ www.ozon.ru/category/knigi-16...
    ★ www.chitai-gorod.ru/search/re...

Комментарии • 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 года назад

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

  • @aleksejnikolaev8618
    @aleksejnikolaev8618 5 лет назад +1

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

  • @alex331911
    @alex331911 4 года назад +1

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

  • @user-uh1rm8py7b
    @user-uh1rm8py7b 4 года назад +1

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

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

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

  • @darkshaman766
    @darkshaman766 5 лет назад +1

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

  • @user-ge6pt5lp9u
    @user-ge6pt5lp9u 2 месяца назад

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

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

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

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

      Благодарю! На каком языке программируете?

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

      @@DmitryAfanasyev php

    • @user-bi6el6oi8z
      @user-bi6el6oi8z 3 месяца назад

      C#, C++

  • @noname-nonaymich
    @noname-nonaymich 4 года назад

    Спасибо!

  • @user-ww1zd7nf2v
    @user-ww1zd7nf2v Год назад

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

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

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

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

    Thanks )

  • @dmitryocheretko703
    @dmitryocheretko703 4 года назад

    спасибо

  • @user-gw2rx7sq7j
    @user-gw2rx7sq7j Год назад

    👍

  • @AlexeypopoW4
    @AlexeypopoW4 4 года назад

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

  • @alex331911
    @alex331911 4 года назад

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

  • @user-dn8go2jh1e
    @user-dn8go2jh1e 4 года назад +1

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

  • @Artem-up5xw
    @Artem-up5xw 4 года назад

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

  • @user-lh9wz4hi5z
    @user-lh9wz4hi5z 4 года назад

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

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

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

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

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

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

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

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

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

  • @eaglesm1993
    @eaglesm1993 4 года назад +1

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

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

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

    • @eaglesm1993
      @eaglesm1993 4 года назад

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

    • @eaglesm1993
      @eaglesm1993 4 года назад

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

  • @christianblacky67
    @christianblacky67 4 года назад

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

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

      Туть ruclips.net/video/Hz7U5XiPkkg/видео.html

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

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

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

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

  • @eugenesasin2757
    @eugenesasin2757 4 года назад +2

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

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

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

    • @eugenesasin2757
      @eugenesasin2757 4 года назад

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

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

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

    • @eugenesasin2757
      @eugenesasin2757 4 года назад

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

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

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

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

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

  • @goqorgrigoryan4520
    @goqorgrigoryan4520 4 года назад

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

  • @user-vn2nx1yq9e
    @user-vn2nx1yq9e Год назад +1

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

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

    Спасибо!