C# Proxy Заместитель | Design Patterns

  Рет қаралды 18,917

codaza

codaza

Күн бұрын

Паттерны проектирования важно и нужно знать. В этом ролике мы поговорим про design pattern Proxy (Заместитель) - структурный шаблон проектирования. Поговорим о сути, посмотрим на примеры и сделаем реализацию в Visual Studio 2022 и .NET 6. Заходите, будет интересно и станет понятно 🙂
Исходный код проекта на GitHub: github.com/codaza/Cooker
C# 10 New features (новые фичи): • C# 10 New features | Н...
Telegram канал: t.me/codaza
На кофе ☕️: pay.cloudtips.ru/p/179d0532
Patreon: / codaza
Boosty: boosty.to/codaza
0:00 - Начало
0:48 - Proxy это Structural Design Pattern
1:23 - Концепция Proxy
2:23 - Proxy для логирования
2:59 - Proxy для кэширования
3:57 - Proxy для контроля доступа
4:17 - Proxy для дополнительной логики
4:44 - Виды Proxy
6:13 - Анатомия Proxy
8:47 - Live example
10:48 - Реализация примера
28:07 - Завершение
#proxy #designpatterns #ITubeTeam #gof #csharp #net6 #паттерныпроектирования #codaza

Пікірлер: 84
@codaza-channel
@codaza-channel 2 жыл бұрын
Удобная навигация по видео :) 0:00 - Начало 0:48 - Proxy это Structural Design Pattern 1:23 - Концепция Proxy 2:23 - Proxy для логирования 2:59 - Proxy для кэширования 3:57 - Proxy для контроля доступа 4:17 - Proxy для дополнительной логики 4:44 - Виды Proxy 6:13 - Анатомия Proxy 8:47 - Live example 10:48 - Реализация примера 28:07 - Завершение
@kazarovroman
@kazarovroman 2 жыл бұрын
Больше видео про паттерны, а то я сам не разберусь))))))
@codaza-channel
@codaza-channel 2 жыл бұрын
Ок, будем разбираться 😉
@user-uy5eh6du4y
@user-uy5eh6du4y 2 жыл бұрын
Учу C#, получается что курсы дают 25% знаний, еще 25% другие ресурсы, а этот канал 50% знаний. Очень хотелось бы видеть больше видео.
@klimovDev
@klimovDev 2 жыл бұрын
Спасибо за материал. Хотелось бы, так же увидеть, на канале рассмотрение всех базовых патернов проектирования(все 23 шт). Канал просто находка. Подписался. Жду нового материала.
@codaza-channel
@codaza-channel 2 жыл бұрын
Благодарю за поддержку. Новый материал уже готовится.
@user-zj6vd4ib2t
@user-zj6vd4ib2t 2 жыл бұрын
Я редко пишу комментарии, но этот канал безусловно заслуживает внимание и проявление поддержки. Автору большое спасибо, такого качественного контента по C# мало на русском ютуб. Жду новых роликов! P. S. Lo-fi на фоне шикарен.
@codaza-channel
@codaza-channel 2 жыл бұрын
Благодарю за поддержку, это действительно очень важно для новых каналов. Рад, что Вам понравился формат и подход к донесению информации. Впереди много интересного. 🙂
@user-yt5pl9wk3l
@user-yt5pl9wk3l 2 жыл бұрын
Очень релаксирующий ритм повествования, не грузит после рабочего дня. Спасибо! Паттерн Спецификация - в ютубе мало представлен.
@MaratSharipov1711
@MaratSharipov1711 2 жыл бұрын
Это бесподобно! Прям мой реальный кейс, только не с рестораном)) Очень круто!)
@chinchilla898
@chinchilla898 2 жыл бұрын
Потрясающее описание и визуализация деталей паттерна! Спасибо!
@VitaliyZlobin
@VitaliyZlobin Жыл бұрын
Я только что отдохнул после работы с пользой)) codaza, ты гигакрут!
@codaza-channel
@codaza-channel Жыл бұрын
💙
@konstantinkobayashi4462
@konstantinkobayashi4462 2 жыл бұрын
Это прекрасно! Спасибо за видео. Материал и подача на высшем уровне!
@codaza-channel
@codaza-channel 2 жыл бұрын
Благодарю за высокую оценку 🙂 Здорово, что удалось показать Proxy с интересной стороны!
@vitalysushilov5802
@vitalysushilov5802 2 жыл бұрын
Очень приятная подача материала. Спасибо.
@vitalytretyak4636
@vitalytretyak4636 2 жыл бұрын
спасибо за ролик) давай следующий паттерн Декоратор
@phat80
@phat80 2 жыл бұрын
А чего так мало просмотров? Сделано качественнее чем в подавляющем большинстве роликов про паттерны.
@codaza-channel
@codaza-channel 2 жыл бұрын
Алгоритмы KZfaq беспощадны 😥 Спасибо Вам за комментарий 🙂
@phat80
@phat80 2 жыл бұрын
@@codaza-channel ну мне то алгоритмы выдали как-то ролик ))) Значит не все потеряно. А ведь я даже не искал ни C#, ни паттерны уже очень давно.
@codaza-channel
@codaza-channel 2 жыл бұрын
Тогда ждём 🙂
@phat80
@phat80 2 жыл бұрын
@@codaza-channel Держись! Всегда жалко, когда хорошие авторы забрасывают каналы, так как не смогли добиться запланированных результатов.
@marksreider7645
@marksreider7645 2 жыл бұрын
Спасибо за то, что делитесь своими знаниями!!!
@user-dv5ue1om3m
@user-dv5ue1om3m 2 жыл бұрын
Просто шикарно! С теорией, практикой, не нудным повествованием, а главное, видно что автор понимает о чем говорит!
@salamatturdukhodzhaev3894
@salamatturdukhodzhaev3894 2 жыл бұрын
Ты крут! Все внятно и спасибо за работу!
@shnextv1217
@shnextv1217 2 жыл бұрын
Было занимательно и полезно. Спасибо, автор!
@qnet1080
@qnet1080 2 жыл бұрын
Лучший канал что встречал , спасибо , вы лучшие!
@OneGogh-Pro
@OneGogh-Pro Жыл бұрын
Очень хорошие, структурированные и понятные видео, спасибо большое!
@TheKolian1996
@TheKolian1996 2 жыл бұрын
Спасибо! Забавно, что компилятор больше не позволяет билдить структуру Order в таком виде, как в видео =) Был баг, который сейчас поправили. Сейчас в VS2022 и C#10 требуется дефолтный конструктор для подобной инициализации свойств. P.S. Чтобы убирать неиспользуемые операторы using в VS быстро: Ctrl+R, Ctrl+G
@miniputlol
@miniputlol Жыл бұрын
Контент, подача - супер! Больше подписчиков каналу! Спасибо за видео~
@mirNpeace
@mirNpeace 2 жыл бұрын
крутое видео, спасибо! Я бы добавил, что smart proxy также называют декоратором. Для меня это было неожиданной новостью)
@leshi1628
@leshi1628 4 ай бұрын
Классный дизайн на канале
@cssex2692
@cssex2692 2 жыл бұрын
великолепно👍
@firemanhood1526
@firemanhood1526 2 жыл бұрын
Кодаза топ!
@AzimbekSagynbaev
@AzimbekSagynbaev 2 жыл бұрын
Даешь больше паттернов!!!!
@ArmDinamit
@ArmDinamit Жыл бұрын
спасибо огромное
@turalaliyev1764
@turalaliyev1764 Жыл бұрын
Продолжай про паттерны плз очень круто получается!
@user-rb5dg6cw3x
@user-rb5dg6cw3x 2 жыл бұрын
Спасибо!
@NickPavlov00
@NickPavlov00 2 жыл бұрын
Я использовал подобное кеширование, не зная, что это proxy pattern xD
@codaza-channel
@codaza-channel 2 жыл бұрын
С паттернами это нормально) Мы часто используем их в работе и позже узнаем название и формальное определение.
@blowin8273
@blowin8273 2 жыл бұрын
Все здорово, спасибо за материал. Только мне кажется, что стоило разделить прокси на 2, один для кэширования, а другой для логгирования, чтобы соблюдался принцип SRP и показать наглядно, как поменяется поведение, в зависимости от порядка сборки объекта. Это конечно придирки, но если мы знаем, что статусы получаем медленно, то их точно не стоит получать каждый раз в foreach, хотя бы перед циклом) ну и можно было по ключу найти название, а не через linq
@codaza-channel
@codaza-channel 2 жыл бұрын
Большое спасибо за уточнения. Действительно, стоило это учесть. Основной фокус в видео это, разумеется, Proxy, поэтому детали (как вы правильно заметили про загрузку статусов в foreach) были несколько "размыты".
@Glor_YT
@Glor_YT 2 жыл бұрын
Ну раз речь пошла о паттерне прокси, то логично продолжить декоратором, адаптером или мостом. Переодически путаюсь кто из них кто. Может ваши видео разложат у меня по полочкам окончательно эту информацию.
@user-lp5gp8qs7b
@user-lp5gp8qs7b 2 жыл бұрын
🔥🔥🔥
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 жыл бұрын
Спасибо. Жалко что нового net 5 и тем более Net 6 нет на более мене старых проектах. )))
@zerg100500
@zerg100500 2 жыл бұрын
Ты хорош
@edosoghomonyan3072
@edosoghomonyan3072 2 жыл бұрын
👍
@VTryhub
@VTryhub Жыл бұрын
Реально хорошо подготовленный материал и подача. Думал все остальные посмотреть из 23 ех... ан нет... жаль
@oshastitko
@oshastitko 4 ай бұрын
Отличная подача материала! Только видоизменяет данные "декоратор", а прокси - нет.
@vd3598
@vd3598 2 жыл бұрын
Спасибо, очень понятно разложено. Но теперь интересно, какая принципиальная разница с декоратором?
@codaza-channel
@codaza-channel 2 жыл бұрын
Виктор, благодарю за комментарий и хороший вопрос. Задача Proxy - проксировать запрос от клиента к ресурсу оставаясь прозрачным на стыке взаимодействия клиента и ресурса без изменения интерфейса. Декоратор масшатабнее, он может расширять функциональность ресурса и интерфейса. Отличным применением декоратора будет пример, когда класс ресурса закрыт для наследования, а вам необходимо расширить его функциональность (возможно даже, серьёзно расширив поведение).
@zluka4636
@zluka4636 Жыл бұрын
Здравствуйте. Спасибо за видео. У меня есть такой вопрос то что вы сделали вот тут: "IChef chef = new ProxChef(new Chef());
@sehzadeselim863
@sehzadeselim863 Жыл бұрын
А если бы понадобилось изменить статусы? Пришлось бы переписывать словарь? Добавить какой-нибудь метод UpdateStatuses() в классе Chief, который изменит информацию, а мы потом её получим в Proxy?
@eugennekarp8791
@eugennekarp8791 Жыл бұрын
Привет) Подача материала огонь Скажи пожалуйста, что за трек на 13:50?
@prognorock
@prognorock 2 жыл бұрын
Спасибо за видео! Вместо dictionary со статусами не целесообразно ли использовать ,в данном случае, enum?
@codaza-channel
@codaza-channel 2 жыл бұрын
Для конкретного примера из видео это непринципиально. А вообще, в коммерческой разработке, enum не даст возможности заведения новых статусов без перекомпиляции приложения. В примере я подразумевал, что список статусов может быть расширен, как если бы мы загружали его из базы данных. Решение с использованием Dictionary является более гибким.
@anninkov
@anninkov 2 жыл бұрын
Как на счёт Декоратора и его разница с Proxy?
@DF-ov1zm
@DF-ov1zm Жыл бұрын
Надо было прост сказать Proxy - это враппер, пасаны.
@pochtaliot
@pochtaliot Жыл бұрын
Декоратор будет?
@user-hx3cb2uu4c
@user-hx3cb2uu4c Жыл бұрын
Привет, я упустил момент и не разобрался. Получается когда первый раз мы вызываем статусы , они "подвисаю" , потому что записываются в коллекцию ( IDictionary? _statuses), после этого мы всегда ее возвращаем , изменяя только сами статусы в ней. Так вот как Коллекция уведомляется об изменении статуса и выводит уже новый ?
@1MrFritz1
@1MrFritz1 Жыл бұрын
Сами статусы (id и название статуса) читаются 1 раз внутри прокси и сохраняются (кэшируются), затем при следующем обращении к GetStatuses берётся их кэшированая версия. А изменение id статуса происходит в словаре заказов из-за использования функции рандом каждый раз, когда мы запрашиваем список заказов (chief.GetOrders) на клиенте (в цикле while в Main). Надеюсь понятно объяснил.
@railroadman2k
@railroadman2k Жыл бұрын
Видео уже давно, если нет ничего подобного расскажи разницу между прокси и адаптером
@ilizzium1241
@ilizzium1241 Жыл бұрын
18:42 вырезан звук
@dakefasso9124
@dakefasso9124 Жыл бұрын
Спасибо за видео. Единственное, не совсем понял, как у нас меняются статусы у Proxy, если мы обращаемся за ними к Chief только один раз при инициализации, а дальше поле _status не меняется (т.к. после первой же инициализации оно будет не null). _status = _chief.GetStatus(); Образует ссылку, поэтому значения _status меняются при изменении _chief (который, в свою очередь, ссылается на new Chief())?
@codaza-channel
@codaza-channel Жыл бұрын
В примере, который обсуждается в ролике, подразумевается, что справочник статусов является неизменным, то есть статусы заказов ("ready", "not ready", "preparing") не добавляются и не удаляются. В более сложных сценариях, справочник может изменяться. Для его обновления необходимо использовать различные стратегии кэширования, которые подбираются в соответствии с требованиями задачи. Например, можно применить времени экспирации, чтобы справочник загружался через каждые 10 минут.
@aleksey8405
@aleksey8405 Жыл бұрын
​@@codaza-channel Рискну предположить, что вопрос был не об этом. Я думаю, что Dake Fasso, как и мне, интересно - почему статусы в консоли обновляются, если мы не обращаемся к _chief повторно? Потому что мы кэшируем ссылки на сами статусы, и в данном случае нам не нужно ждать 2 секунды, т.к. эти 2 секунды запускаются параллельно, в другом потоке и к нашему выводу в консоль уже не имеют никакого отношения. Верно?
@pddbsegetetesbeabeaeg
@pddbsegetetesbeabeaeg Жыл бұрын
@@aleksey8405 Я заметил что у всех моих заказов одинаковые статусы. Например 1 1 1 или в следующий раз 2 2 2, во время дебага проскальзываю 1 1 2 например
@sergeyz.5845
@sergeyz.5845 Жыл бұрын
Потому что заказы с обновленными статусами мы получаем с помощью метода GetOrder(). А в методе GetStatus мы получаем только все возможные статусы для заказа. Просто вместо того, чтобы каждый раз создавать словарь с одними и теми же значениями, можно было один раз в классе создать константу и в методе передавать на нее ссылку, но здесь сделано иначе для примера кэширования.
@user-ng6cc6xz4b
@user-ng6cc6xz4b 2 жыл бұрын
Как включить такие подсказки от VS? Те что серым высвечиваются в коде 12:37
@codaza-channel
@codaza-channel 2 жыл бұрын
Честно говоря, даже не задумывался об этих подсказках. Я использую Visual Studio 2022 и ReSharper. Вероятно что-то включено по умолчанию 🙂
@aaa_aaa6226
@aaa_aaa6226 2 жыл бұрын
А разве ChiefProxy должен в конструкторе иметь конкретного Chief? Лучше ведь IChief, чтобы мы могли один и тот же прокси использовать для любых реализаций Шефов.
@codaza-channel
@codaza-channel 2 жыл бұрын
Здесь нюанс состоит в том, что ресурс (в нашем случае Chief) не всегда реализует какой-то интерфейс (в нашем случае IChief). Чаще всего ресурс реализован в виде подключаемой библиотеки, которая реализована сторонними разработчиками. Поэтому в классе Proxy, мы не всегда имеем возможность определение ресурса через интерфейс. Если же есть возможность работы с ресурсом через интерфейс, то вариант, который вы предложили, конечно, является предпочтительным.
@user-by9zh4zq7h
@user-by9zh4zq7h 11 ай бұрын
Декоратор (Decorator) плиз
@user-ti8ke4cp8p
@user-ti8ke4cp8p Жыл бұрын
Не очень понял в чем смысл? То что мы обращаемся за статусом один раз - это понятно. Но ведь статус может измениться, и для этого надо обращаться к шефу, чтоб узнать актуальный. Объясните пожалуйста
@zergzerg4844
@zergzerg4844 Жыл бұрын
И сам интерфейс нельзя считать за прокси, по сути он же тоже заместитель реального объекта, только без реализации конечно? А то смотрел какойто видос про этот паттерн, там реализовывали интерфейс и говорили что это прокси, а здесь совсем все иначе.
@codaza-channel
@codaza-channel Жыл бұрын
Рекомендую обратиться к первоисточнику, а именно, к книге Gang of Four Design Patterns. Отбросьте все видео (включая это) и прочитайте рекомендации от авторов паттерна.
@DmitryIvanov-sj2tt
@DmitryIvanov-sj2tt Жыл бұрын
После второго «испачкать руки в грязи» снял лайк и выключил
@TheKaazus
@TheKaazus Жыл бұрын
Теория не плохая, реализация не достойна паблика. Учите своих зрителей как не надо программировать. Я понимаю, что это для примера, но ваш код нарушает принципы ООП и SOLID, а неопытные зрители повторяют эти ошибки. Пичалька.
@nkochubashev
@nkochubashev Жыл бұрын
Поймал ошибку: Inconsistent accessibility: return type 'IEnumerable' is less accessible than method 'IChief.GetOrders()'
@nkochubashev
@nkochubashev Жыл бұрын
Исправил: public struct Order
Singleton Design Pattern in C# - Do it THAT way
13:15
tutorialsEU - C#
Рет қаралды 24 М.
ЧУТЬ НЕ УТОНУЛ #shorts
00:27
Паша Осадчий
Рет қаралды 10 МЛН
WORLD'S SHORTEST WOMAN
00:58
Stokes Twins
Рет қаралды 88 МЛН
C# QuickSort Быстрая сортировка
21:32
codaza
Рет қаралды 29 М.
C# Delegates Делегаты
18:14
codaza
Рет қаралды 84 М.
C# LINQ GroupBy
8:44
codaza
Рет қаралды 8 М.
Паттерн "прототип" на языке C#
20:34
Дмитрий Нестерук
Рет қаралды 17 М.
Шаблоны Java. Прокси / Заместитель (Proxy / Surrogate)
17:03
Паттерн Адаптер (Adapter)
5:08
ExtremeCode
Рет қаралды 94 М.
ЧУТЬ НЕ УТОНУЛ #shorts
00:27
Паша Осадчий
Рет қаралды 10 МЛН