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

แชร์
ฝัง
  • เผยแพร่เมื่อ 30 ก.ย. 2024

ความคิดเห็น • 93

  • @codaza-channel
    @codaza-channel  2 ปีที่แล้ว +12

    Удобная навигация по видео :)
    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 ปีที่แล้ว +13

    Опа , это как раз то , что я хотел бы от тебя посмотреть
    Человек умеющий объяснять сложные вещи простыми словами с хорошим монтажем , объясняет паттерны .
    Браво

  • @joym8857
    @joym8857 9 หลายเดือนก่อน +1

    Отличное видео, респект тебе.
    Хотел поинтересоваться, не лучше было бы назвать интерфейс IReportBuilder, а не IEmployeeReportBuilder? Ведь его будут реализовывать классы разных билдеров отчётов, а не только отчёта о работниках. Ну и соответственно сделать базовую сущность для отчёта, например класс Report, и от него уже наследовать конкретные отчёты (и возвращать именно Report из метода в IReportBuilder)

  • @MaksimBartosh
    @MaksimBartosh 2 ปีที่แล้ว +1

    *Не пишу на решётке с нового года. Котлин приятнее, сахар 'apply' решает.*

  • @KeskilChnProgram
    @KeskilChnProgram 2 ปีที่แล้ว +8

    Обожаю этот канал, просто находка 😃

  • @Noname-f6z7z
    @Noname-f6z7z 2 ปีที่แล้ว +6

    Хотелось бы видеть побольше видео о патернах.
    Мне безумно нравится Ваша подача материала. Спасибо за это :>

  • @agens9538
    @agens9538 ปีที่แล้ว +1

    уф 100 "-" - жестко, new string...

  • @АлексейКарасев-п2ж
    @АлексейКарасев-п2ж 8 หลายเดือนก่อน +3

    ЛЮБЛЮ ВОПЕР И ТВОИ ВИДЕО!

  • @vovadoom
    @vovadoom 2 ปีที่แล้ว +1

    Великолепный ролик, благодарю. Вы просили подать вам идею !
    Хотел попросить сделать урок, построить полностью проект с правильной архитектурой на Net 5 со всеми слоями и Entity Framework очень важно Context с многими базами данных.Спасибо

  • @tynoheaekbat2328
    @tynoheaekbat2328 2 ปีที่แล้ว +3

    Великолепный ролик, спасибо! надеюсь, что дальше будет только круче!

  • @BrownAleks
    @BrownAleks 2 ปีที่แล้ว +2

    Отличный учебный материал! Прост потрясающе! Я в диком восторге! Аплодирую стоя! Однозначно лайк, подписка. Рекомендации друзьям, студентам, соседям и т.д...

  • @I_c_a_r_u_S_S
    @I_c_a_r_u_S_S 3 หลายเดือนก่อน

    Хорошая работа, однако я бы предпочел более простой пример для введения (без директора), т.к. это немного усложняет понимание в принципе простого конструкта

  • @clutchmeisteryo9831
    @clutchmeisteryo9831 ปีที่แล้ว

    А есть какой то способ настроить порядок вызова методов в билдере? Условно чтобы был строго определен порядок вызова. builder.AddBeaf().AddKetchup() но не наоборот?

  • @dizaynerak
    @dizaynerak ปีที่แล้ว

    метод Build*() должен быть один и он должен возвращать созданный объект. У вас даже в презентации все методы начинаются с With*(), а вы зачем-то взяли и забыли про это.

  • @gadelgamestudio3617
    @gadelgamestudio3617 2 ปีที่แล้ว +2

    Одна из лучших подач информации в русскоязычном youtube!Успехов Вам, продолжайте в том же духе!

  • @sunly4887
    @sunly4887 11 หลายเดือนก่อน

    показана самая отвратительная реализация паттерна. Хранить продукт в билдере это полный кринж

  • @owlindark
    @owlindark ปีที่แล้ว

    Thanks for your work. Comment a s support of your channel.

  • @Игорь-ж9е4з
    @Игорь-ж9е4з ปีที่แล้ว

    Класс! Спасибо за ваш труд. А вы часом менторингом не занимаетесь?

  • @AlienZom
    @AlienZom 2 ปีที่แล้ว +1

    Две мясных котлеты гриль, специальный соус, сыр, огурцы, салат и лук, всё на булочке с кунжутом, только так и это ... не Воппер.

  • @salamatturdukhodzhaev3894
    @salamatturdukhodzhaev3894 2 ปีที่แล้ว +2

    Знаю что тут станет понятно. Заранее спасибо!!!

  • @АлексФерНорте
    @АлексФерНорте 2 ปีที่แล้ว +1

    Ты самый лучший! Спецом отлайкаю тебя вообще везде чтобы рано или поздно попасть в список имен рядом с Иваном и Борисом :P

  • @vitalysushilov5802
    @vitalysushilov5802 2 ปีที่แล้ว +2

    Спасибо, отличная работа и отличное исполнение. Жду новых паттернов.

  • @Алексей-ъ9р6н
    @Алексей-ъ9р6н 2 ปีที่แล้ว +1

    Ни Иван, ни Борис, ни Фёдор, но всё равно лайк поставлю!
    P.S. некст голосую за паттерн Мост.

  • @redice8928
    @redice8928 ปีที่แล้ว

    про воппер забыли сказать, что он состоит из лука, там практически всё лук.

  • @ДанилПасечник-х7п
    @ДанилПасечник-х7п 2 ปีที่แล้ว +2

    Великолепная подача, спасибо тебе большое!!

  • @pinpad5956
    @pinpad5956 ปีที่แล้ว

    Объяснение интересное, но что за три поросенка Хидер, Боди и Футир?

  • @lettuceturnipthebeets790
    @lettuceturnipthebeets790 2 ปีที่แล้ว +1

    БУКВАЛЬНО СЕГОДНЯ СМОТРЕЛ ПРО ЭТОТ ПАТТЕРН!!
    спасибо большое, кодаза

  • @uporka6924
    @uporka6924 9 หลายเดือนก่อน

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

  • @narzaru
    @narzaru หลายเดือนก่อน

    Мне большое всего нравится пример из книги банды четырех - лабиринт. А то остальные примеры напоминают обычный конструктор.

    • @universeunity9970
      @universeunity9970 22 วันที่ผ่านมา

      Здесь важно понимать, что билдер в основном нужен именно, когда объект иммутабельный и полей много. Тогда сетеры ты не сделаешь, а конструкторов нужно много, на все возможные комбинации параметров, вот в чём дело. Пример может быть любой, пример с бургером вполне себе неплохой.

  • @voffkaboo7183
    @voffkaboo7183 2 ปีที่แล้ว +1

    Как всегда топ, практически всегда повторяю эти видосы перед собесом)

  • @1ww-bg1lp
    @1ww-bg1lp ปีที่แล้ว

    new string('-',100)

  • @АндрейСуховерхов-ж1ы
    @АндрейСуховерхов-ж1ы 2 ปีที่แล้ว +1

    Огромное спасибо автору роликов, что так медленно объясняет. Впервые, смотря ролики, я успеваю понимать, о чём речь!!! И примеры отличные, и монтаж красивый. Продолжайте в том же духе!

  • @Дмитрийсекрет-н7о
    @Дмитрийсекрет-н7о 2 ปีที่แล้ว +1

    Срочно нужна большая серия уроков по всем паттернам и лучшим практикам проектирования и разработки.

  • @krahmaletskrakmalets7587
    @krahmaletskrakmalets7587 2 ปีที่แล้ว +1

    Давай давай, контент в кайф, почаще бы вот так

  • @ДмитрийУрюпин-ч6у
    @ДмитрийУрюпин-ч6у 2 ปีที่แล้ว +1

    Действительно реальный объект реального мира))

  • @НикитаАкула-ш2ч
    @НикитаАкула-ш2ч 2 ปีที่แล้ว +1

    Крутое видео, видно,что проделан огромный пласт работы, спасибо

  • @stingerfingerr1599
    @stingerfingerr1599 2 ปีที่แล้ว +1

    Спасибо большое за чудесный ролик

  • @yaric99
    @yaric99 2 ปีที่แล้ว +1

    Класс! Очень нравятся мне ваши видео по паттернам!

  • @V1RTUOZ88
    @V1RTUOZ88 2 ปีที่แล้ว +1

    Ммм, свежак подъехал

  • @tortik22
    @tortik22 2 ปีที่แล้ว +1

    Очень классный канал! Приятно слушать и смотреть на профессионала, а не на всяких там дударей, хаудихо и т.п) А есть на канале гайды для изучения Шарпа от новичка до Джуна?)

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

      Благодарю за высокую оценку 💙 Рад, что информация оказалась полезной для вас.
      Гайдов пока нет.

  • @Skywalker06gg
    @Skywalker06gg 2 ปีที่แล้ว +1

    Почему я не знал про этот канал раньше?
    Почему он появился в рекомендациях спустя столько времени
    Грёбаный Ютуб
    Автору большое спасибо

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

      Лучше поздно, чем никогда!
      Добро пожаловать на борт ⛵

  • @krahmaletskrakmalets7587
    @krahmaletskrakmalets7587 2 ปีที่แล้ว +1

    Отличный ролик👍

  • @Дмитрийсекрет-н7о
    @Дмитрийсекрет-н7о 2 ปีที่แล้ว +1

    Респект и уважуха.

  • @rob11nzon
    @rob11nzon ปีที่แล้ว

    Интерфейс IEmployeeReportBuilder лучше переименовать в IReportBuilder, так как интерфейс должен быть максимально абстрактным. Чтобы потом не фрустрировать от строчки CustromerReportBuilder : IEmployeeReportBuilder.

  • @Привет-ъ9м
    @Привет-ъ9м 2 ปีที่แล้ว +1

    Отличный канал!

  • @boterf12
    @boterf12 2 ปีที่แล้ว +1

    гений

  • @vitor_corve
    @vitor_corve 2 ปีที่แล้ว +1

    Шикарная подача

  • @ellakamenetsky7742
    @ellakamenetsky7742 ปีที่แล้ว

    Спасибо большое!!! Хорошее изложение материала. Пожелание - сделать тише фоновую музыку в следующих видео.

  • @ДмитрийКондратенко-б5ь
    @ДмитрийКондратенко-б5ь 2 ปีที่แล้ว +1

    @codaza подскажи что за фишка в Program.cs. Без определения класса, без Main, не внутри метода - сразу объявлять переменные. Это что-то новенькое в c#? Где почитать можно? И да, отличный ролик, все супер понятно, спасибо большое за твой труд

    • @ДмитрийКондратенко-б5ь
      @ДмитрийКондратенко-б5ь 2 ปีที่แล้ว +1

      А вот, нашёл: docs.microsoft.com/ru-ru/dotnet/csharp/fundamentals/program-structure/top-level-statements.
      Не знал об этом

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Да, это новая возможность, которая появилась в C# 9. В целом, ничего сложного, просто можно не писать всю обвязку связанную с главной точкой входа - методом Main(). Мне нравится пользоваться этой возможностью для небольших учебных примеров.

  • @ivannebyshynets8829
    @ivannebyshynets8829 2 ปีที่แล้ว +1

    Супер!

  • @dgdarkking266
    @dgdarkking266 ปีที่แล้ว

    Директор же в данном коде это паттерн фасад?
    А то я названия никак не запомню у шаблонов - прочитал пару статей и вдохновился чем-то новым, если такого ранее не юзал, а вот названия разом 20+ шаблонов хрен запомнишь

  • @glukh0v_d1ma
    @glukh0v_d1ma ปีที่แล้ว

    спасибо, настолько доходчиво что дальше некуда, на пальцах, очень благодарен!!!

  • @arturbo3134
    @arturbo3134 ปีที่แล้ว

    Бро Ты лучший. Работаю джуном на шарпе в Германии на бэке. За годы обучения тут, даже близко такого уровня умелого преподнесения информации не встречал. Лайк и уважение.

  • @newak3346
    @newak3346 ปีที่แล้ว

    Будущая профессия всех "программистов"

  • @turalaliyev1764
    @turalaliyev1764 2 ปีที่แล้ว

    ты лучший на рунете по дотнет продолжи с паттернами пожалуйста, еще хотелось бы увидеть обьяснение от тебя на тему EF core tracking как происходит

  • @coolexcs
    @coolexcs 2 ปีที่แล้ว

    Невероятно доступное объяснение и хороший пример, рад что это является нормой для канала. Хотелось бы побольше уроков про паттерны. Также интересно, почему при переопределении .ToString() на 13:58 использовался StringBuilder, однако далее в видеоролике работа шла с обычными строками (например, при работе с _employeeReport на 18:48-22:48). Какие критерии обычно служат выбором между string и StringBuilder, возможно ли делать правильный выбор при отсутствии весомого опыта ? Стоит ли ждать видеороликов по базовым аспектам asp.net core ?

  • @ushio.
    @ushio. ปีที่แล้ว

    Дякую за пояснення! Величезна допомога початківцям ❤

  • @cgultra910
    @cgultra910 ปีที่แล้ว

    Очень хорошее и понятное объяснение патерна, но мне не хватает обзора кода после его написания. Просто с помощью дебага пройтись и пояснить что вообще происходит

  • @Corwin44
    @Corwin44 ปีที่แล้ว

    Один из лучших каналов по шарпу. Смотрю после курса Сакутина, все еще нахожу для себя много нового и интересного, топовый контент 🔥

  • @oniko3075
    @oniko3075 11 หลายเดือนก่อน

    У вас явно талант. Спасибо столь качественные уроки

  • @hello_world_zz
    @hello_world_zz ปีที่แล้ว

    надеюсь будете продолжать свой труд!

  • @dokers2084
    @dokers2084 2 ปีที่แล้ว

    Было бы круто увидеть видео или шортс про оператор return от вас

  • @TheKovalAndrey
    @TheKovalAndrey 2 ปีที่แล้ว +1

    это великолепно, чувак

  • @PushkaryovVsevolod
    @PushkaryovVsevolod ปีที่แล้ว

    Люто лайкаю! Подписался.

  • @masdaiable
    @masdaiable 11 หลายเดือนก่อน

    Просто, огромное спасибо!

  • @DIY-dq9hv
    @DIY-dq9hv ปีที่แล้ว

    Лучшее что я видел из видео по языкам

  • @inskips
    @inskips ปีที่แล้ว

    Отлично. Спасибо

  • @Re-tj8bt
    @Re-tj8bt ปีที่แล้ว

    Боже храни Codaza!

  • @ilyazakharov5050
    @ilyazakharov5050 2 ปีที่แล้ว

    Если появится новый бургер, в который мы захотим добавлять совсем новый ингридиент, то придется добавить в интерфейс buildPardD() и потом во всех уже созданных классах имплементировать этот метод?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Это зависит от ваших целей и задач. Если добавление нового ингредиента потребует соответствующие изменения в тех местах, где создаётся объект, то ответ: да, нужно во всех классах имплементировать этот метод. Если же у вас большая кодовая база и новый метод не затрагивает её, то ответ: нет, достаточно унаследовать интерфейс IBuilder с добавлением нового метода и унаследовать класс строителя с реализацией унаследованного интерфейса. А можно реализовать унаследованный интерфейс в одном из классов-строителей где планируется его применение.

  • @dakefasso9457
    @dakefasso9457 ปีที่แล้ว

    Спасибо!

  • @КамбэкПетрович
    @КамбэкПетрович 2 ปีที่แล้ว

    Лучший!!

  • @saldy723
    @saldy723 2 ปีที่แล้ว

    У меня по ходу создания бургера, вопрос созрел. Я бы хотел скрыть методы сборки бургера от клиента, но тогда шеф тоже не сможет собирать его. Как я мог бы инкапсулировать этот процесс?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +2

      Интересное желание 🙂 Не знаю зачем вам хотелось бы так сделать, но у меня есть для вас один вариант. Вы можете выделить строителя и шефа в отдельный проект и сделать методы сборки бургера с модификатором доступа internal. При таком подходе, методы будут видны в рамках сборки и не видны за её пределами.

  • @AzizjanAyupov_leo
    @AzizjanAyupov_leo 2 ปีที่แล้ว

    }{идер

  • @ВикторияШипунова-и7ф
    @ВикторияШипунова-и7ф 2 ปีที่แล้ว

    Здравствуйте! Подскажите, пожалуйста, на диаграмме UML какие все-таки связи протягивались бы от продукта к остальным объектам?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว

      Здравствуйте!
      От Builder - связь зависимости (--->)
      От Client и Director зависит от бизнес-логики (может быть агрегация, композиция или ассоциация). В классическом виде, любые связи от Director к Product стоит избегать, но бывают ситуации, где этого сделать нельзя. Как правило, такие связи принято опускать, чтобы не загромождать суть решаемой проблемы.

    • @ВикторияШипунова-и7ф
      @ВикторияШипунова-и7ф 2 ปีที่แล้ว +1

      @@codaza-channel Спасибо!

  • @Fenix72rus
    @Fenix72rus 2 ปีที่แล้ว

    С текстом понятно, делаем Append и всё соединилось. А что с классами то делать?
    Есть у меня класс бургер. Как в него правильно уместить все ингредиенты, если ингредиенты сами являются классами.

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

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

    • @Fenix72rus
      @Fenix72rus 2 ปีที่แล้ว

      @@codaza-channel Спасибо!
      А если мне нужны не текстовые данные? У каждого класса свой тип данных, не сериализуемый в стринг. В таком случае можно использовать Builder?

    • @codaza-channel
      @codaza-channel  2 ปีที่แล้ว +1

      Конечно, так как Builder - это не про "строки"; Builder - это про построение сложного объекта по шагам.
      В примере мы использовали ToString() у объекта отчёта в качестве наглядной реализации.
      Чтобы понять использовать паттерн Builder или нет, ответьте себе на три вопроса:
      1. У меня есть сложный объект?
      2. Существуют ли вариации создания этого объекта?
      3. Возможно ли вынесение логики создания объекта?
      Если на все три вопроса Вы ответили "Да", то ваш выбор - паттерн Builder.

  • @uporka6924
    @uporka6924 9 หลายเดือนก่อน

    Я за бигтейсти из мака

  • @vladlenbulatov1022
    @vladlenbulatov1022 5 หลายเดือนก่อน +1

    Оччень!!! медленные слова в которых мало смыслы (котлеты, компоненты и т.п.) - ну очень (!) долго. Может расчет на тупых или иначе "обкуренных"? Первые пять минут можно уложить в одну.
    Совет (надеюсь) - "курите" меньше, может и высказывать свои мысли научитесь высказывать проще и быстрее...

    • @mr_smind
      @mr_smind 3 หลายเดือนก่อน

      включи x2.
      Что касается видео то сделано очень хороши и без воды.