C# Builder Строитель | Design Patterns

  Рет қаралды 27,898

codaza

codaza

Күн бұрын

Паттерны проектирования важно и нужно знать. В этом ролике мы поговорим про design pattern Builder (Строитель) - порождающий шаблон проектирования. Поговорим о сути, посмотрим на примеры и сделаем реализацию в Visual Studio 2022 и .NET 6. Заходите, будет интересно и станет понятно 🙂
Исходный код проекта на GitHub: github.com/codaza/Reporter
Telegram канал: t.me/codaza
На кофе ☕️: pay.cloudtips.ru/p/179d0532
Patreon: / codaza
Boosty: boosty.to/codaza
0:00 - Начало
0:55 - Builder это порождающий паттерн
1:31 - Проблема если не использовать паттерн Builder
4:20 - Решение которое предлагает паттерн Builder
6:43 - Анатомия Builder
10:32 - Поддержка канала
10:54 - Live example
11:45 - Пример: Создаём проект в Visual Studio 2022 (.NET6)
28:11 - Пример: Рефакторинг Builder на Fluent Builder
#builder #designpatterns #gof #csharp #net6 #паттерныпроектирования #codaza #builderpattern #builderdesignpattern

Пікірлер: 89
@codaza-channel
@codaza-channel 2 жыл бұрын
Удобная навигация по видео :) 0:00 - Начало 0:55 - Builder это порождающий паттерн 1:31 - Проблема если не использовать паттерн Builder 4:20 - Решение которое предлагает паттерн Builder 6:43 - Анатомия Builder 10:32 - Поддержка канала 10:54 - Live example 11:45 - Пример: Создаём проект в Visual Studio 2022 (.NET6) 28:11 - Пример: Рефакторинг Builder на Fluent Builder
@zcrownsworth
@zcrownsworth 2 жыл бұрын
Опа , это как раз то , что я хотел бы от тебя посмотреть Человек умеющий объяснять сложные вещи простыми словами с хорошим монтажем , объясняет паттерны . Браво
@gadelgamestudio3617
@gadelgamestudio3617 2 жыл бұрын
Одна из лучших подач информации в русскоязычном youtube!Успехов Вам, продолжайте в том же духе!
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 жыл бұрын
Срочно нужна большая серия уроков по всем паттернам и лучшим практикам проектирования и разработки.
@ushio.
@ushio. Жыл бұрын
Дякую за пояснення! Величезна допомога початківцям ❤
@user-jt1di2we5q
@user-jt1di2we5q 2 жыл бұрын
Огромное спасибо автору роликов, что так медленно объясняет. Впервые, смотря ролики, я успеваю понимать, о чём речь!!! И примеры отличные, и монтаж красивый. Продолжайте в том же духе!
@user-ed9ij6fw1h
@user-ed9ij6fw1h 2 жыл бұрын
Хотелось бы видеть побольше видео о патернах. Мне безумно нравится Ваша подача материала. Спасибо за это :>
@KeskilChnProgram
@KeskilChnProgram 2 жыл бұрын
Обожаю этот канал, просто находка 😃
@user-xc8hj4xv3d
@user-xc8hj4xv3d 4 ай бұрын
ЛЮБЛЮ ВОПЕР И ТВОИ ВИДЕО!
@user-hk8sh7zb4c
@user-hk8sh7zb4c Жыл бұрын
Ты самый лучший! Спецом отлайкаю тебя вообще везде чтобы рано или поздно попасть в список имен рядом с Иваном и Борисом :P
@glukh0v_d1ma
@glukh0v_d1ma 10 ай бұрын
спасибо, настолько доходчиво что дальше некуда, на пальцах, очень благодарен!!!
@BrownAleks
@BrownAleks 2 жыл бұрын
Отличный учебный материал! Прост потрясающе! Я в диком восторге! Аплодирую стоя! Однозначно лайк, подписка. Рекомендации друзьям, студентам, соседям и т.д...
@oniko3075
@oniko3075 7 ай бұрын
У вас явно талант. Спасибо столь качественные уроки
@stingerfingerr1599
@stingerfingerr1599 2 жыл бұрын
Спасибо большое за чудесный ролик
@yaric99
@yaric99 Жыл бұрын
Класс! Очень нравятся мне ваши видео по паттернам!
@vitalysushilov5802
@vitalysushilov5802 2 жыл бұрын
Спасибо, отличная работа и отличное исполнение. Жду новых паттернов.
@user-jo5qo4yo8g
@user-jo5qo4yo8g 2 жыл бұрын
Великолепная подача, спасибо тебе большое!!
@arturbo3134
@arturbo3134 Жыл бұрын
Бро Ты лучший. Работаю джуном на шарпе в Германии на бэке. За годы обучения тут, даже близко такого уровня умелого преподнесения информации не встречал. Лайк и уважение.
@tynoheaekbat2328
@tynoheaekbat2328 2 жыл бұрын
Великолепный ролик, спасибо! надеюсь, что дальше будет только круче!
@user-tx5mi3ie2z
@user-tx5mi3ie2z 2 жыл бұрын
Крутое видео, видно,что проделан огромный пласт работы, спасибо
@krahmaletskrakmalets7587
@krahmaletskrakmalets7587 2 жыл бұрын
Отличный ролик👍
@Corwin44
@Corwin44 Жыл бұрын
Один из лучших каналов по шарпу. Смотрю после курса Сакутина, все еще нахожу для себя много нового и интересного, топовый контент 🔥
@vitor_corve
@vitor_corve 2 жыл бұрын
Шикарная подача
@Skywalker06gg
@Skywalker06gg Жыл бұрын
Почему я не знал про этот канал раньше? Почему он появился в рекомендациях спустя столько времени Грёбаный Ютуб Автору большое спасибо
@codaza-channel
@codaza-channel Жыл бұрын
Лучше поздно, чем никогда! Добро пожаловать на борт ⛵
@salamatturdukhodzhaev3894
@salamatturdukhodzhaev3894 2 жыл бұрын
Знаю что тут станет понятно. Заранее спасибо!!!
@hello_world_zz
@hello_world_zz Жыл бұрын
надеюсь будете продолжать свой труд!
@masdaiable
@masdaiable 7 ай бұрын
Просто, огромное спасибо!
@DIY-dq9hv
@DIY-dq9hv Жыл бұрын
Лучшее что я видел из видео по языкам
@inskips
@inskips Жыл бұрын
Отлично. Спасибо
@ivannebyshynets8829
@ivannebyshynets8829 2 жыл бұрын
Супер!
@voffkaboo7183
@voffkaboo7183 Жыл бұрын
Как всегда топ, практически всегда повторяю эти видосы перед собесом)
@user-tx2je4xh1l
@user-tx2je4xh1l 2 жыл бұрын
Отличный канал!
@krahmaletskrakmalets7587
@krahmaletskrakmalets7587 2 жыл бұрын
Давай давай, контент в кайф, почаще бы вот так
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 жыл бұрын
Респект и уважуха.
@PushkaryovVsevolod
@PushkaryovVsevolod Жыл бұрын
Люто лайкаю! Подписался.
@agens9538
@agens9538 Жыл бұрын
уф 100 "-" - жестко, new string...
@dakefasso9457
@dakefasso9457 Жыл бұрын
Спасибо!
@Re-tj8bt
@Re-tj8bt Жыл бұрын
Боже храни Codaza!
@user-nb8ll9ye1i
@user-nb8ll9ye1i Жыл бұрын
Лучший!!
@user-zu1tm4mo2k
@user-zu1tm4mo2k 2 жыл бұрын
Действительно реальный объект реального мира))
@TheKovalAndrey
@TheKovalAndrey Жыл бұрын
это великолепно, чувак
@codaza-channel
@codaza-channel Жыл бұрын
🤟
@vovadoom
@vovadoom 2 жыл бұрын
Великолепный ролик, благодарю. Вы просили подать вам идею ! Хотел попросить сделать урок, построить полностью проект с правильной архитектурой на Net 5 со всеми слоями и Entity Framework очень важно Context с многими базами данных.Спасибо
@owlindark
@owlindark Жыл бұрын
Thanks for your work. Comment a s support of your channel.
@lettuceturnipthebeets790
@lettuceturnipthebeets790 2 жыл бұрын
БУКВАЛЬНО СЕГОДНЯ СМОТРЕЛ ПРО ЭТОТ ПАТТЕРН!! спасибо большое, кодаза
@ellakamenetsky7742
@ellakamenetsky7742 Жыл бұрын
Спасибо большое!!! Хорошее изложение материала. Пожелание - сделать тише фоновую музыку в следующих видео.
@newak3346
@newak3346 10 ай бұрын
Будущая профессия всех "программистов"
@joym8857
@joym8857 5 ай бұрын
Отличное видео, респект тебе. Хотел поинтересоваться, не лучше было бы назвать интерфейс IReportBuilder, а не IEmployeeReportBuilder? Ведь его будут реализовывать классы разных билдеров отчётов, а не только отчёта о работниках. Ну и соответственно сделать базовую сущность для отчёта, например класс Report, и от него уже наследовать конкретные отчёты (и возвращать именно Report из метода в IReportBuilder)
@user-ng6cc6xz4b
@user-ng6cc6xz4b 2 жыл бұрын
Ни Иван, ни Борис, ни Фёдор, но всё равно лайк поставлю! P.S. некст голосую за паттерн Мост.
@turalaliyev1764
@turalaliyev1764 Жыл бұрын
ты лучший на рунете по дотнет продолжи с паттернами пожалуйста, еще хотелось бы увидеть обьяснение от тебя на тему EF core tracking как происходит
@user-hr5rj7ky1w
@user-hr5rj7ky1w 8 ай бұрын
Класс! Спасибо за ваш труд. А вы часом менторингом не занимаетесь?
@cgultra910
@cgultra910 11 ай бұрын
Очень хорошее и понятное объяснение патерна, но мне не хватает обзора кода после его написания. Просто с помощью дебага пройтись и пояснить что вообще происходит
@dokers2084
@dokers2084 2 жыл бұрын
Было бы круто увидеть видео или шортс про оператор return от вас
@MaksimBartosh
@MaksimBartosh 2 жыл бұрын
*Не пишу на решётке с нового года. Котлин приятнее, сахар 'apply' решает.*
@coolexcs
@coolexcs Жыл бұрын
Невероятно доступное объяснение и хороший пример, рад что это является нормой для канала. Хотелось бы побольше уроков про паттерны. Также интересно, почему при переопределении .ToString() на 13:58 использовался StringBuilder, однако далее в видеоролике работа шла с обычными строками (например, при работе с _employeeReport на 18:48-22:48). Какие критерии обычно служат выбором между string и StringBuilder, возможно ли делать правильный выбор при отсутствии весомого опыта ? Стоит ли ждать видеороликов по базовым аспектам asp.net core ?
@tortik22
@tortik22 2 жыл бұрын
Очень классный канал! Приятно слушать и смотреть на профессионала, а не на всяких там дударей, хаудихо и т.п) А есть на канале гайды для изучения Шарпа от новичка до Джуна?)
@codaza-channel
@codaza-channel 2 жыл бұрын
Благодарю за высокую оценку 💙 Рад, что информация оказалась полезной для вас. Гайдов пока нет.
@user-nj1bh7zs7d
@user-nj1bh7zs7d Жыл бұрын
Интерфейс IEmployeeReportBuilder лучше переименовать в IReportBuilder, так как интерфейс должен быть максимально абстрактным. Чтобы потом не фрустрировать от строчки CustromerReportBuilder : IEmployeeReportBuilder.
@boterf12
@boterf12 Жыл бұрын
гений
@user-we6wp1ky7f
@user-we6wp1ky7f 2 жыл бұрын
@codaza подскажи что за фишка в Program.cs. Без определения класса, без Main, не внутри метода - сразу объявлять переменные. Это что-то новенькое в c#? Где почитать можно? И да, отличный ролик, все супер понятно, спасибо большое за твой труд
@user-we6wp1ky7f
@user-we6wp1ky7f 2 жыл бұрын
А вот, нашёл: docs.microsoft.com/ru-ru/dotnet/csharp/fundamentals/program-structure/top-level-statements. Не знал об этом
@codaza-channel
@codaza-channel 2 жыл бұрын
Да, это новая возможность, которая появилась в C# 9. В целом, ничего сложного, просто можно не писать всю обвязку связанную с главной точкой входа - методом Main(). Мне нравится пользоваться этой возможностью для небольших учебных примеров.
@V1RTUOZ88
@V1RTUOZ88 2 жыл бұрын
Ммм, свежак подъехал
@redice8928
@redice8928 Жыл бұрын
про воппер забыли сказать, что он состоит из лука, там практически всё лук.
@pinpad5956
@pinpad5956 9 ай бұрын
Объяснение интересное, но что за три поросенка Хидер, Боди и Футир?
@user-rt8nr3gf1o
@user-rt8nr3gf1o 2 жыл бұрын
Здравствуйте! Подскажите, пожалуйста, на диаграмме UML какие все-таки связи протягивались бы от продукта к остальным объектам?
@codaza-channel
@codaza-channel 2 жыл бұрын
Здравствуйте! От Builder - связь зависимости (--->) От Client и Director зависит от бизнес-логики (может быть агрегация, композиция или ассоциация). В классическом виде, любые связи от Director к Product стоит избегать, но бывают ситуации, где этого сделать нельзя. Как правило, такие связи принято опускать, чтобы не загромождать суть решаемой проблемы.
@user-rt8nr3gf1o
@user-rt8nr3gf1o 2 жыл бұрын
@@codaza-channel Спасибо!
@dizaynerak
@dizaynerak 8 ай бұрын
метод Build*() должен быть один и он должен возвращать созданный объект. У вас даже в презентации все методы начинаются с With*(), а вы зачем-то взяли и забыли про это.
@clutchmeisteryo9831
@clutchmeisteryo9831 9 ай бұрын
А есть какой то способ настроить порядок вызова методов в билдере? Условно чтобы был строго определен порядок вызова. builder.AddBeaf().AddKetchup() но не наоборот?
@ilyazakharov5050
@ilyazakharov5050 2 жыл бұрын
Если появится новый бургер, в который мы захотим добавлять совсем новый ингридиент, то придется добавить в интерфейс buildPardD() и потом во всех уже созданных классах имплементировать этот метод?
@codaza-channel
@codaza-channel 2 жыл бұрын
Это зависит от ваших целей и задач. Если добавление нового ингредиента потребует соответствующие изменения в тех местах, где создаётся объект, то ответ: да, нужно во всех классах имплементировать этот метод. Если же у вас большая кодовая база и новый метод не затрагивает её, то ответ: нет, достаточно унаследовать интерфейс IBuilder с добавлением нового метода и унаследовать класс строителя с реализацией унаследованного интерфейса. А можно реализовать унаследованный интерфейс в одном из классов-строителей где планируется его применение.
@Fenix72rus
@Fenix72rus 2 жыл бұрын
С текстом понятно, делаем Append и всё соединилось. А что с классами то делать? Есть у меня класс бургер. Как в него правильно уместить все ингредиенты, если ингредиенты сами являются классами.
@codaza-channel
@codaza-channel 2 жыл бұрын
Спасибо за отличный вопрос. В сущности, пример с бургером, практически не отличается от примера с отчётом. В случае когда в состав вашего класса входят другие классы, в этих вложенных классах Вы можете переопределить метод ToString(). Таким образом, в классе Burger, Вы сможете сможете получить строковое представление вложенного объекта. Кроме того, пример можно разнообразить. Представьте что повару (который готовит бургер) на экран монитора с заказами отображается не просто текст (бургер с котлетой и помидорами), а прям картинка и, возможно, рекомендации по приготовлению.
@Fenix72rus
@Fenix72rus 2 жыл бұрын
@@codaza-channel Спасибо! А если мне нужны не текстовые данные? У каждого класса свой тип данных, не сериализуемый в стринг. В таком случае можно использовать Builder?
@codaza-channel
@codaza-channel 2 жыл бұрын
Конечно, так как Builder - это не про "строки"; Builder - это про построение сложного объекта по шагам. В примере мы использовали ToString() у объекта отчёта в качестве наглядной реализации. Чтобы понять использовать паттерн Builder или нет, ответьте себе на три вопроса: 1. У меня есть сложный объект? 2. Существуют ли вариации создания этого объекта? 3. Возможно ли вынесение логики создания объекта? Если на все три вопроса Вы ответили "Да", то ваш выбор - паттерн Builder.
@dgdarkking266
@dgdarkking266 Жыл бұрын
Директор же в данном коде это паттерн фасад? А то я названия никак не запомню у шаблонов - прочитал пару статей и вдохновился чем-то новым, если такого ранее не юзал, а вот названия разом 20+ шаблонов хрен запомнишь
@saldy723
@saldy723 Жыл бұрын
У меня по ходу создания бургера, вопрос созрел. Я бы хотел скрыть методы сборки бургера от клиента, но тогда шеф тоже не сможет собирать его. Как я мог бы инкапсулировать этот процесс?
@codaza-channel
@codaza-channel Жыл бұрын
Интересное желание 🙂 Не знаю зачем вам хотелось бы так сделать, но у меня есть для вас один вариант. Вы можете выделить строителя и шефа в отдельный проект и сделать методы сборки бургера с модификатором доступа internal. При таком подходе, методы будут видны в рамках сборки и не видны за её пределами.
@AlienZom
@AlienZom 2 жыл бұрын
Две мясных котлеты гриль, специальный соус, сыр, огурцы, салат и лук, всё на булочке с кунжутом, только так и это ... не Воппер.
@1ww-bg1lp
@1ww-bg1lp 11 ай бұрын
new string('-',100)
@AzizjanAyupov_leo
@AzizjanAyupov_leo 2 жыл бұрын
}{идер
@sunly4887
@sunly4887 7 ай бұрын
показана самая отвратительная реализация паттерна. Хранить продукт в билдере это полный кринж
@vladlenbulatov1022
@vladlenbulatov1022 Ай бұрын
Оччень!!! медленные слова в которых мало смыслы (котлеты, компоненты и т.п.) - ну очень (!) долго. Может расчет на тупых или иначе "обкуренных"? Первые пять минут можно уложить в одну. Совет (надеюсь) - "курите" меньше, может и высказывать свои мысли научитесь высказывать проще и быстрее...
@uporka6924
@uporka6924 5 ай бұрын
Я за бигтейсти из мака
@uporka6924
@uporka6924 5 ай бұрын
Не понимаю зачем нужен интерфейс билдера. Ведь он обязует реализовать методы, название которых лишены смысла. А директора часто манагером обзывают
C# Strategy Стратегия | Design Patterns
19:06
codaza
Рет қаралды 27 М.
🍟Best French Fries Homemade #cooking #shorts
00:42
BANKII
Рет қаралды 41 МЛН
Pray For Palestine 😢🇵🇸|
00:23
Ak Ultra
Рет қаралды 35 МЛН
когда достали одноклассники!
00:49
БРУНО
Рет қаралды 3,9 МЛН
C# Proxy Заместитель | Design Patterns
28:51
codaza
Рет қаралды 18 М.
C# Delegates Делегаты
18:14
codaza
Рет қаралды 81 М.
Все о React 19 за 10 минут
10:47
Frontend Fundamentals | Александр Караджиков
Рет қаралды 5 М.
C# LINQ Left Join
10:31
codaza
Рет қаралды 11 М.
G.R.A.S.P | шаблоны проектирования
12:09
🍟Best French Fries Homemade #cooking #shorts
00:42
BANKII
Рет қаралды 41 МЛН