Тёмный

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

codaza
Подписаться 22 тыс.
Просмотров 29 тыс.
50% 1

Паттерны проектирования важно и нужно знать. В этом ролике мы поговорим про 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

Опубликовано:

 

28 июл 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 91   
@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 года назад
Опа , это как раз то , что я хотел бы от тебя посмотреть Человек умеющий объяснять сложные вещи простыми словами с хорошим монтажем , объясняет паттерны . Браво
@user-xc8hj4xv3d
@user-xc8hj4xv3d 6 месяцев назад
ЛЮБЛЮ ВОПЕР И ТВОИ ВИДЕО!
@user-ed9ij6fw1h
@user-ed9ij6fw1h 2 года назад
Хотелось бы видеть побольше видео о патернах. Мне безумно нравится Ваша подача материала. Спасибо за это :>
@KeskilChnProgram
@KeskilChnProgram 2 года назад
Обожаю этот канал, просто находка 😃
@gadelgamestudio3617
@gadelgamestudio3617 2 года назад
Одна из лучших подач информации в русскоязычном youtube!Успехов Вам, продолжайте в том же духе!
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 года назад
Срочно нужна большая серия уроков по всем паттернам и лучшим практикам проектирования и разработки.
@user-jt1di2we5q
@user-jt1di2we5q 2 года назад
Огромное спасибо автору роликов, что так медленно объясняет. Впервые, смотря ролики, я успеваю понимать, о чём речь!!! И примеры отличные, и монтаж красивый. Продолжайте в том же духе!
@BrownAleks
@BrownAleks 2 года назад
Отличный учебный материал! Прост потрясающе! Я в диком восторге! Аплодирую стоя! Однозначно лайк, подписка. Рекомендации друзьям, студентам, соседям и т.д...
@ushio.
@ushio. Год назад
Дякую за пояснення! Величезна допомога початківцям ❤
@tynoheaekbat2328
@tynoheaekbat2328 2 года назад
Великолепный ролик, спасибо! надеюсь, что дальше будет только круче!
@stingerfingerr1599
@stingerfingerr1599 2 года назад
Спасибо большое за чудесный ролик
@vitalysushilov5802
@vitalysushilov5802 2 года назад
Спасибо, отличная работа и отличное исполнение. Жду новых паттернов.
@yaric99
@yaric99 Год назад
Класс! Очень нравятся мне ваши видео по паттернам!
@glukh0v_d1ma
@glukh0v_d1ma Год назад
спасибо, настолько доходчиво что дальше некуда, на пальцах, очень благодарен!!!
@user-jo5qo4yo8g
@user-jo5qo4yo8g 2 года назад
Великолепная подача, спасибо тебе большое!!
@user-tx5mi3ie2z
@user-tx5mi3ie2z 2 года назад
Крутое видео, видно,что проделан огромный пласт работы, спасибо
@oniko3075
@oniko3075 9 месяцев назад
У вас явно талант. Спасибо столь качественные уроки
@krahmaletskrakmalets7587
@krahmaletskrakmalets7587 2 года назад
Давай давай, контент в кайф, почаще бы вот так
@hello_world_zz
@hello_world_zz Год назад
надеюсь будете продолжать свой труд!
@user-hk8sh7zb4c
@user-hk8sh7zb4c Год назад
Ты самый лучший! Спецом отлайкаю тебя вообще везде чтобы рано или поздно попасть в список имен рядом с Иваном и Борисом :P
@Skywalker06gg
@Skywalker06gg 2 года назад
Почему я не знал про этот канал раньше? Почему он появился в рекомендациях спустя столько времени Грёбаный Ютуб Автору большое спасибо
@codaza-channel
@codaza-channel 2 года назад
Лучше поздно, чем никогда! Добро пожаловать на борт ⛵
@arturbo3134
@arturbo3134 Год назад
Бро Ты лучший. Работаю джуном на шарпе в Германии на бэке. За годы обучения тут, даже близко такого уровня умелого преподнесения информации не встречал. Лайк и уважение.
@DIY-dq9hv
@DIY-dq9hv Год назад
Лучшее что я видел из видео по языкам
@voffkaboo7183
@voffkaboo7183 2 года назад
Как всегда топ, практически всегда повторяю эти видосы перед собесом)
@vitor_corve
@vitor_corve 2 года назад
Шикарная подача
@krahmaletskrakmalets7587
@krahmaletskrakmalets7587 2 года назад
Отличный ролик👍
@salamatturdukhodzhaev3894
@salamatturdukhodzhaev3894 2 года назад
Знаю что тут станет понятно. Заранее спасибо!!!
@user-tx2je4xh1l
@user-tx2je4xh1l 2 года назад
Отличный канал!
@Corwin44
@Corwin44 Год назад
Один из лучших каналов по шарпу. Смотрю после курса Сакутина, все еще нахожу для себя много нового и интересного, топовый контент 🔥
@masdaiable
@masdaiable 9 месяцев назад
Просто, огромное спасибо!
@ivannebyshynets8829
@ivannebyshynets8829 2 года назад
Супер!
@vovadoom
@vovadoom 2 года назад
Великолепный ролик, благодарю. Вы просили подать вам идею ! Хотел попросить сделать урок, построить полностью проект с правильной архитектурой на Net 5 со всеми слоями и Entity Framework очень важно Context с многими базами данных.Спасибо
@user-zu1tm4mo2k
@user-zu1tm4mo2k 2 года назад
Действительно реальный объект реального мира))
@inskips
@inskips Год назад
Отлично. Спасибо
@owlindark
@owlindark Год назад
Thanks for your work. Comment a s support of your channel.
@Re-tj8bt
@Re-tj8bt Год назад
Боже храни Codaza!
@user-yo7mw6oj4p
@user-yo7mw6oj4p 2 года назад
Респект и уважуха.
@lettuceturnipthebeets790
@lettuceturnipthebeets790 2 года назад
БУКВАЛЬНО СЕГОДНЯ СМОТРЕЛ ПРО ЭТОТ ПАТТЕРН!! спасибо большое, кодаза
@TheKovalAndrey
@TheKovalAndrey 2 года назад
это великолепно, чувак
@codaza-channel
@codaza-channel 2 года назад
🤟
@user-nb8ll9ye1i
@user-nb8ll9ye1i Год назад
Лучший!!
@PushkaryovVsevolod
@PushkaryovVsevolod Год назад
Люто лайкаю! Подписался.
@ellakamenetsky7742
@ellakamenetsky7742 Год назад
Спасибо большое!!! Хорошее изложение материала. Пожелание - сделать тише фоновую музыку в следующих видео.
@dakefasso9457
@dakefasso9457 Год назад
Спасибо!
@I_c_a_r_u_S_S
@I_c_a_r_u_S_S Месяц назад
Хорошая работа, однако я бы предпочел более простой пример для введения (без директора), т.к. это немного усложняет понимание в принципе простого конструкта
@tortik22
@tortik22 2 года назад
Очень классный канал! Приятно слушать и смотреть на профессионала, а не на всяких там дударей, хаудихо и т.п) А есть на канале гайды для изучения Шарпа от новичка до Джуна?)
@codaza-channel
@codaza-channel 2 года назад
Благодарю за высокую оценку 💙 Рад, что информация оказалась полезной для вас. Гайдов пока нет.
@turalaliyev1764
@turalaliyev1764 Год назад
ты лучший на рунете по дотнет продолжи с паттернами пожалуйста, еще хотелось бы увидеть обьяснение от тебя на тему EF core tracking как происходит
@joym8857
@joym8857 6 месяцев назад
Отличное видео, респект тебе. Хотел поинтересоваться, не лучше было бы назвать интерфейс IReportBuilder, а не IEmployeeReportBuilder? Ведь его будут реализовывать классы разных билдеров отчётов, а не только отчёта о работниках. Ну и соответственно сделать базовую сущность для отчёта, например класс Report, и от него уже наследовать конкретные отчёты (и возвращать именно Report из метода в IReportBuilder)
@user-ng6cc6xz4b
@user-ng6cc6xz4b 2 года назад
Ни Иван, ни Борис, ни Фёдор, но всё равно лайк поставлю! P.S. некст голосую за паттерн Мост.
@agens9538
@agens9538 Год назад
уф 100 "-" - жестко, new string...
@MaksimBartosh
@MaksimBartosh 2 года назад
*Не пишу на решётке с нового года. Котлин приятнее, сахар 'apply' решает.*
@newak3346
@newak3346 Год назад
Будущая профессия всех "программистов"
@dokers2084
@dokers2084 2 года назад
Было бы круто увидеть видео или шортс про оператор return от вас
@cgultra910
@cgultra910 Год назад
Очень хорошее и понятное объяснение патерна, но мне не хватает обзора кода после его написания. Просто с помощью дебага пройтись и пояснить что вообще происходит
@user-hr5rj7ky1w
@user-hr5rj7ky1w 10 месяцев назад
Класс! Спасибо за ваш труд. А вы часом менторингом не занимаетесь?
@coolexcs
@coolexcs Год назад
Невероятно доступное объяснение и хороший пример, рад что это является нормой для канала. Хотелось бы побольше уроков про паттерны. Также интересно, почему при переопределении .ToString() на 13:58 использовался StringBuilder, однако далее в видеоролике работа шла с обычными строками (например, при работе с _employeeReport на 18:48-22:48). Какие критерии обычно служат выбором между string и StringBuilder, возможно ли делать правильный выбор при отсутствии весомого опыта ? Стоит ли ждать видеороликов по базовым аспектам asp.net core ?
@boterf12
@boterf12 2 года назад
гений
@user-nj1bh7zs7d
@user-nj1bh7zs7d Год назад
Интерфейс IEmployeeReportBuilder лучше переименовать в IReportBuilder, так как интерфейс должен быть максимально абстрактным. Чтобы потом не фрустрировать от строчки CustromerReportBuilder : IEmployeeReportBuilder.
@pinpad5956
@pinpad5956 11 месяцев назад
Объяснение интересное, но что за три поросенка Хидер, Боди и Футир?
@redice8928
@redice8928 Год назад
про воппер забыли сказать, что он состоит из лука, там практически всё лук.
@V1RTUOZ88
@V1RTUOZ88 2 года назад
Ммм, свежак подъехал
@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(). Мне нравится пользоваться этой возможностью для небольших учебных примеров.
@clutchmeisteryo9831
@clutchmeisteryo9831 11 месяцев назад
А есть какой то способ настроить порядок вызова методов в билдере? Условно чтобы был строго определен порядок вызова. builder.AddBeaf().AddKetchup() но не наоборот?
@dizaynerak
@dizaynerak 10 месяцев назад
метод Build*() должен быть один и он должен возвращать созданный объект. У вас даже в презентации все методы начинаются с With*(), а вы зачем-то взяли и забыли про это.
@user-rt8nr3gf1o
@user-rt8nr3gf1o 2 года назад
Здравствуйте! Подскажите, пожалуйста, на диаграмме UML какие все-таки связи протягивались бы от продукта к остальным объектам?
@codaza-channel
@codaza-channel 2 года назад
Здравствуйте! От Builder - связь зависимости (--->) От Client и Director зависит от бизнес-логики (может быть агрегация, композиция или ассоциация). В классическом виде, любые связи от Director к Product стоит избегать, но бывают ситуации, где этого сделать нельзя. Как правило, такие связи принято опускать, чтобы не загромождать суть решаемой проблемы.
@user-rt8nr3gf1o
@user-rt8nr3gf1o 2 года назад
@@codaza-channel Спасибо!
@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 2 года назад
У меня по ходу создания бургера, вопрос созрел. Я бы хотел скрыть методы сборки бургера от клиента, но тогда шеф тоже не сможет собирать его. Как я мог бы инкапсулировать этот процесс?
@codaza-channel
@codaza-channel 2 года назад
Интересное желание 🙂 Не знаю зачем вам хотелось бы так сделать, но у меня есть для вас один вариант. Вы можете выделить строителя и шефа в отдельный проект и сделать методы сборки бургера с модификатором доступа internal. При таком подходе, методы будут видны в рамках сборки и не видны за её пределами.
@1ww-bg1lp
@1ww-bg1lp Год назад
new string('-',100)
@AlienZom
@AlienZom 2 года назад
Две мясных котлеты гриль, специальный соус, сыр, огурцы, салат и лук, всё на булочке с кунжутом, только так и это ... не Воппер.
@AzizjanAyupov_leo
@AzizjanAyupov_leo 2 года назад
}{идер
@sunly4887
@sunly4887 9 месяцев назад
показана самая отвратительная реализация паттерна. Хранить продукт в билдере это полный кринж
@vladlenbulatov1022
@vladlenbulatov1022 3 месяца назад
Оччень!!! медленные слова в которых мало смыслы (котлеты, компоненты и т.п.) - ну очень (!) долго. Может расчет на тупых или иначе "обкуренных"? Первые пять минут можно уложить в одну. Совет (надеюсь) - "курите" меньше, может и высказывать свои мысли научитесь высказывать проще и быстрее...
@mr_smind
@mr_smind Месяц назад
включи x2. Что касается видео то сделано очень хороши и без воды.
@uporka6924
@uporka6924 7 месяцев назад
Я за бигтейсти из мака
@uporka6924
@uporka6924 7 месяцев назад
Не понимаю зачем нужен интерфейс билдера. Ведь он обязует реализовать методы, название которых лишены смысла. А директора часто манагером обзывают
Далее
C# Strategy Стратегия | Design Patterns
19:06
ВОТ ЧТО МЫ КУПИЛИ НА ALIEXPRESS
09:35
Просмотров 475 тыс.
C# Delegates Делегаты
18:14
Просмотров 84 тыс.
C# QuickSort Быстрая сортировка
21:32
C# Proxy Заместитель | Design Patterns
28:51