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

  Рет қаралды 17,842

Dmitry Afanasyev

Dmitry Afanasyev

5 жыл бұрын

Стратегия - это поведенческий паттерн, выносит набор алгоритмов в собственные классы и делает их взаимозаменимыми. В этом видео мы рассмотрим шаблон проектирования 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 жыл бұрын
⚝⚝⚝ Покровители канала: ► Константин [ ⚝⚝ Меценат ] Сообщение: "Спасибо за отличные уроки по 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 жыл бұрын
Огромнейшее спасибо за Ваш труд!
@prod.wembley3816
@prod.wembley3816 2 жыл бұрын
Оказалось в роликах намного доступнее чем в статьях. Спасибо огромное.
@alex331911
@alex331911 5 жыл бұрын
Ураааа! Спасибо огромнейшее! От всей души!
@aleksejnikolaev8618
@aleksejnikolaev8618 5 жыл бұрын
Безразмерная благодарность Дмитрий, за благое дело 😉
@Bisirsky
@Bisirsky 2 жыл бұрын
Классно. Буду ещё смотреть, хотя на php не работаю, но это неважно благодаря максимально универсальным объяснениям. Спасибо!
@DmitryAfanasyev
@DmitryAfanasyev 2 жыл бұрын
Благодарю! На каком языке программируете?
@ardixq
@ardixq 2 жыл бұрын
@@DmitryAfanasyev php
@user-bi6el6oi8z
@user-bi6el6oi8z 4 ай бұрын
C#, C++
@user-uh1rm8py7b
@user-uh1rm8py7b 5 жыл бұрын
Спасибо, как всегда полезно 💪👍
@sovrinfo
@sovrinfo 2 жыл бұрын
Спасибо за видео.Коммент в поддержку!
@darkshaman766
@darkshaman766 5 жыл бұрын
замечательный шаблон
@user-ge6pt5lp9u
@user-ge6pt5lp9u 3 ай бұрын
Работал бы с таким напарником в проекте
@alexbendler943
@alexbendler943 2 жыл бұрын
Спасибо!
@alexanderk4481
@alexanderk4481 Жыл бұрын
Thanks )
@vesh95
@vesh95 2 жыл бұрын
Посмотрел до половины и понял, что это лучший пример стратегии. Не смотря на реализацию способа выбора стратегии (я бы лучше классмап сделал). Особо мне понравилось с методом getName. Мало кто подумает, что классу может понадобиться давать обратную связь и позволять идентифицировать себя.
@user-ww1zd7nf2v
@user-ww1zd7nf2v Жыл бұрын
Дмитрий, Вы забросили записывать видосы? Нету видео по остальным поведенческим шаблонам
@dmitryocheretko703
@dmitryocheretko703 4 жыл бұрын
спасибо
@alex331911
@alex331911 4 жыл бұрын
Дмитрий здравствуйте! Можете снять ролик о принципе единой ответственности с точки зрения конструирование объекта и учёта контекста задачи. Также о том как разбивать программу на модули и где должны между модулями проходить границы. Ну например у меня есть модуль отпуска сотрудников. Это список отпусков и подача заявки на отпуск. Далее там есть разные проверки по оставшимся дням и прочими историями. Но вот задача усложняется тем что эти отпуска должны утверждаться его начальником, либо несколькими начальника и сразу. По идее на такую конструкцию утверждения должны быть вынесены в отдельный модуль. Так как утверждать в будущем можно будет и командировки и другие объекты. Как прав льно проектировать классы для такой системы и модули. Какие интерфейсы и где создать. Я прям проспонсирую такой ролик. Вообще хотел бы попросит я к вам на индивидуальные занятия
@resolution07
@resolution07 Жыл бұрын
6:18 за такие неявные подключения мне били по руками. Не проще вынести в конфиги?
@DmitryAfanasyev
@DmitryAfanasyev Жыл бұрын
Чем меньше магии - тем лучше. В примере многовато магии, да. Но если имелся в виду конфиг лары - то не туда, если конфиг модуля, то можно, либо отдельный специализированный класс играющий роль конфига.
@resolution07
@resolution07 Жыл бұрын
@@DmitryAfanasyev был кейс когда конфиг для подобного функционала запихали в конфиг лары... Идея с отдельным классом-конфигуратором - классная. Возьму на вооружение.
@user-dn8go2jh1e
@user-dn8go2jh1e 5 жыл бұрын
Будет ли возможность получить ваши исходники?
@user-gw2rx7sq7j
@user-gw2rx7sq7j Жыл бұрын
👍
@AlexeypopoW4
@AlexeypopoW4 4 жыл бұрын
Спасибо тебе за твои труды!!)
@eaglesm1993
@eaglesm1993 5 жыл бұрын
Делаю проект, в котором есть оформление заказа в 4 шага, с налогами, товарами, с выводом данных стоимости заказа на каждом шаге, к тому же нужно переиспользовать это чтобы выводить данные о уже соершенном заказе в админке, и в кабинете пользователя, есть условия от которых могу меняться цена авто, локации, и еще парочка интересных моментов. Вот вроде все понятно по паттернам, использую репозитории, хелперы, менеджеры, но все равно ощущение что я какую то дичь написал, я сам не могу увидеть всю картину в общем, приходится постоянно вспоминать как я построил логику. Капец просто.
@DmitryAfanasyev
@DmitryAfanasyev 5 жыл бұрын
Как вариант. Погугли pipes в laravel. Делаешь джоб, запускаешь транзакцию, прогоняешь модель заказа и пришедшие данные через пайппы - каждый пайп - это сохранение какого-то момента в заказе. При удаче коммит, при неудаче ролбак. Пусть джоб кушает не реквест получая из него данные, а либо ДТО, ну либо тупо массив. Плюсы - 1) сохранение заказ откуда угодно - из команды, из админки, из сайта. 2) простое включение или выключение доп нюансов сохранения путем добавления пайпов. Пайпы же реализуют какой-то шаблон проектирования - цепочка или что-то такое - на вскидку не помню.
@eaglesm1993
@eaglesm1993 5 жыл бұрын
@@DmitryAfanasyev Погуглил пайпы, классная штука, буду использовать в следующих проектах. Там с сохранением в целом проблем нет, там скорее трабл что четыре шага, это отдельные страницы, и для каждой страницы нужно не только посчитать сумму текущего этапа + сумму предыдущих, но и вывести сумму каждой сущности отдельно. А там почти у каждой сущности есть условия: процентное значение или нет, и зависит от количества дней аренды(авто), тут в общем то в этом сложность) Вроде сделал, и + - нормально, дальше по обстоятельствам буду рефакторить.
@eaglesm1993
@eaglesm1993 5 жыл бұрын
@@DmitryAfanasyev Все таки применил пайпы, они выступили в роли модификаторов цен для разных сущностей, вместе с тем, при модификации цены, в свойство модели записывается класс - информер для получения информации о примененных модификаторах: арифметическая операция, сумма, название(информативность), и сама сущность которая стала причиной смены цены, все на интерфейсах и трейтах. Пайпы классная штука, главное не начать их применять где нужно и где нет)
@agnar878
@agnar878 Жыл бұрын
А в чем разница с фабрикой? В примере порождается один из классов который расчитывает ЗП. Почему поведеньческий? Тут типичная фабрика классов. Ваши видео смотрю, интересно. Но есть вопросы
@KichatovAY
@KichatovAY Жыл бұрын
Стратегия - это про несколько классов, решающих одну и ту же задачу разными путями. Порождение объектов сюда не входит. Т.е. метод getStrategyByUser() не относится к стратегии, это действительно скорее фабрика, которую для простоты не стали выносить в отдельный класс.
@user-lh9wz4hi5z
@user-lh9wz4hi5z 4 жыл бұрын
Что-то уж сильно похож данный шаблон на делегирование. Прям один в один. Или я чет не понял?
@eugenesasin2757
@eugenesasin2757 4 жыл бұрын
В приведенном примере не понятно почему используется стратегия. Стратегия нам нужна, если мы на ходу для одного объекта или для разных объектов, но одного класса, будем использовать разные алгоритмы. Тут расчет ЗП лучше сделать методом классов профессий: логиста, флориста и т.д...
@DmitryAfanasyev
@DmitryAfanasyev 4 жыл бұрын
Возможно. Но из вышесказанного - один подход не противоречит другому.
@eugenesasin2757
@eugenesasin2757 4 жыл бұрын
​@@DmitryAfanasyev Это похоже на микроскоп и гвозди.
@DmitryAfanasyev
@DmitryAfanasyev 4 жыл бұрын
@@eugenesasin2757 Отличное пояснение....
@eugenesasin2757
@eugenesasin2757 4 жыл бұрын
@@DmitryAfanasyev Это не троллинг. Я пытаюсь разобраться в паттернах и ваши видео мне очень помогают. Спасибо за вашу работу!
@DmitryAfanasyev
@DmitryAfanasyev 4 жыл бұрын
@@eugenesasin2757 Да, я тоже самое пытаюсь сделать, так как эти шаблоны забываются и самому будет полезным пересматривать. И если вдруг есть грубые ошибки - вэлком - исправим. Но в данном шаблоне пока ошибки не вижу - частный случай стратегии....
@Artem-up5xw
@Artem-up5xw 4 жыл бұрын
Лайк, подписка, респект )))
@kostyaanisimov5431
@kostyaanisimov5431 3 жыл бұрын
«Мухи отдельно, котлеты отдельно» как это вбить голову нашему тимлиду?
@christianblacky67
@christianblacky67 4 жыл бұрын
исходник где?)))
@DmitryAfanasyev
@DmitryAfanasyev 4 жыл бұрын
Туть kzfaq.info/get/bejne/fuBniJiJzrbPm5s.html
@artemtaylor669
@artemtaylor669 3 жыл бұрын
Какой же я всё-таки тупой, хоспаде.
@AnnaIsHere
@AnnaIsHere 3 жыл бұрын
Я тоже
@goqorgrigoryan4520
@goqorgrigoryan4520 4 жыл бұрын
что с левым глазом ? ))))
@DmitryAfanasyev
@DmitryAfanasyev 4 жыл бұрын
Болеет
@user-vn2nx1yq9e
@user-vn2nx1yq9e Жыл бұрын
нафига тебе на рабочем столе говорящая голова?
@noname-nonaymich
@noname-nonaymich 4 жыл бұрын
Спасибо!
Survive 100 Days In Nuclear Bunker, Win $500,000
32:21
MrBeast
Рет қаралды 150 МЛН
I'm Excited To see If Kelly Can Meet This Challenge!
00:16
Mini Katana
Рет қаралды 34 МЛН
Вы чего бл….🤣🤣🙏🏽🙏🏽🙏🏽
00:18
Jumping off balcony pulls her tooth! 🫣🦷
01:00
Justin Flom
Рет қаралды 34 МЛН
The Strategy Pattern: Write BETTER PYTHON CODE Part 3
15:31
ArjanCodes
Рет қаралды 111 М.
Паттерны стратегия в unity3D
6:29
Максим Крюков
Рет қаралды 28 М.
G.R.A.S.P | шаблоны проектирования
12:09
Шаблоны проектирования для микросервисов
1:07:50
Александр Бармин
Рет қаралды 27 М.
Survive 100 Days In Nuclear Bunker, Win $500,000
32:21
MrBeast
Рет қаралды 150 МЛН