Абстрактная фабрика. Паттерны проектирования - обмен простоты на гибкость?
Вставка
- Опубліковано 2 лис 2023
- Поговорим о паттернах вообще и о паттерне Абстрактная фабрика в частности!
Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб:
botanim.to.digital/
botanim_to_digital_bot.t.me/
Telegram - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...
Зеленый - чудный парень! Все время правильные вещи подсказывает. Как без него раньше то обходился? )
Тоже рад, что он присоединился!
На самом деле зеленый отличная задумка! Добавляет юморка в видео. Это отлично помогает сфокусироваться и не поймать скуку. Лично у меня проблема с этим. Если видео монотонное - то не важно на сколько оно информативное. Скорее всего я ничего не пойму и не запомню. Круто придумал!
Очень понравилась идея с "зелёным"! Идеи, описанные Алексеем в конце видео, просты, но их понимание становится очевидным только с опытом. Ощущение, как будто "зелёный" - все те вопросы и недопонимание, возникающие у новичков, погружающихся в тему паттернов. Как раз из-за них и возникает 2 "лагеря": зелёный и Алексей в первой части видео, который все свои решения аргументировал как "ну так красиво". И как раз в конце Алексей и говорит "истину" - оба лагеря не правы, так как важно соблюдать баланс.
Побольше бы такого контента, думающего про зрителя и его возможных вопросах 😊❤
Очень круто! Можешь снять больше видео про паттерны проектирования?
Велкам ту ботаним)
Спасибо большое, приятно смотреть твои видео, от тебя заряжает позитивом и отношением к программированию как к искусству а не как к работе ❤❤❤
обожаю формат твоих видео - всё как нужно: сразу к делу, трудные концепции простым языком по полочкам, дружественная обстановка. всем рекомендую твой канал, все довольны. спасибо за контент!)
Классно раскидал, полиморфизм на месте!
А Зелёный - вощщще огонь, епте)
Лучшее объяснение абстрактной фабрики!
Как похорошел зелёный из M&M’s при Алексее!
Очень полезно и интересно, спасибо Алексею и зеленому
Наконец то снова стали выходить видео! Уже соскучились! 🎉
Шикарно! Объединил программирование и формат скетча. Зеленый, говорящий про Dependency Injection и что все сложно - великолепно.
Спасибо большое! Крутое видео и шикарная подача материала 👍
Прекрасное объяснение. Автору спасибо!
Очень крутой формат и тема здоровская! Продолжайте в том же духе:)
Кайф, успехов вам ❤
Классная подача материала! Зеленый - просто изюминка))
Просто смотреть приятно и лампово, не говоря, уже о пользе).
Даёшь больше зелёного что бы он сам изначальный код писал, который потом ты рефакторишь, и зелёного можно ещё рептилоидом назвать, потому что они правят миром, причём глядя на средний код так точно)
Спасибо за материал. Очень полезно! Хотелось бы продолжение сериала Паттерны с серией на каждый 👍
Отличный пример, спасибо! 🙂
Здравствуйте, спасибо за видео! Очень жду ваш курс, когда планируете его выпускать? :)
Ура! Ты возвращайся
конфликт с зелёным выглядит кринжовенько, но только в моменты, когда это именно конфликт :))
когда это просто "слишком умный" комментатор, прям идеально, прям нравица
Спасибо! С "Зеленым чуваком" вообще - огонь! Хотелось бы еще про паттерны. 👍
Спасибо, отличное видео, по отличной теме! Но окошки на холодосе - это конечно успех ))
Отличное видео, отличная работа
Растеееете! Качество видео классное, понравилось, что добавили зеленого. Вы читали какие-то книжки по монтажу, свету и сьемке? Можете посоветовать? 😅
Пожалуйста побольше про абстракции и паттерны
Пожелания и предложения - реализовывать вместо if elif через dict, так и быстрее работает (вместо n сравнений 1 соответствие по хэшу) и не меняется основной код (дикт в данном случае плагин). Ну и еще пачка if elif не заменяет else, а вот операционнка другая может оказаться и падение будет с невнятной ошибкой о переменной gui использованной до объявления... не хорошо
Касательно ошибки - это ж не продакшн код, а демо паттерна.
Видео нужны чаще!
Жду все остальные 20 паттернов от вас))
Очень интересно, спсибо!
Я все ждал, когда в конце окажется, что Зеленый - это настоящий автор канала, а Черный - абстрактный собирательный гротескный образ, который рассказывает как НЕ надо.
Отличная подача материала. Для меня, программирующего время от времени, все выглядит предельно ясно и понятно, даже мотивирует руководствоваться именно таким принципом программирования. Продолжай, пожалуйста, в таком же стиле с другом критиком.
Спасибо!
ооооо наконец то. Как раз можно сделать GUI для примеров паттерна.
GUI остаётся САМЫМ лучшим применением ООП. Во многих остальных случаях его применение имеет массу нюансов 😀
отличное видео, спасибо!
Круть! Только вчера незаметно для себя изобрел этот паттерн, а сегодня вот узнал что его уже изобрели(
Лучший канал на этом сайте :)
можно видео только с зеленым минут на 12?
снимай больше про паттерны)
Мне больше нравиться, вариант когда есть один класс обертка, а конкретная реализация вызывается в его конструкторе.
Но в любом случае ООП хорошо в меру, сколько раз(правда на пхп) приходилось править код и без удаленного дебага не возможно понять какой кусок кода исполняется, а потом ищи все остальные варианты и правь там(автор всей этой красоты давно уволился и после него ещё человек 5 занимались поддержкой, каждый со своим пониманием красоты), причём некоторые варианты не более чем фантомные(никогда не работают). А потом выгребай ошибки, неделями. В итоге по опыту иф-элс правится, в разы быстрее, надёжнее и главное под силу даже начинающему мидлу.
Можешь на досуге записать ролик про основы Git? Искал, но ничего конкретного на эту тему не нашел.
у меня вопрос. Если добавилась новая реализация RefrigeratorGui, но у него в методах добавлены или еще хуже изменены входящие аргументы, то что делать тогда? Допустим в метод create_window() добавляется новая переменная background (просто для примера). То что тогда делать? Помогите пожалуйста!
Формат видео очень крутой)
Спасибо!
Лайк авансом!)
Лайк однозначно за зеленого)))
Паттерны это круто! У меня часто, когда узнаю что-то новое, потом хочется его запихнуть куда-нибудь. В конечном счете понял, что это опасное желание. Порой лучше просто знать, что есть паттерны и какие они, чтобы применить вовремя. Таким запихиванием, лишь бы применить я много раз себе жизнь усложнил в простейших проектах :-D
Благодарю за видео
Зелёному из конца видео хочется ответить: простое лучше, чем сложное, хотя сложное лучше, чем запутанное
расчехлили абстрактную фабрику на полную колбасу, зелёный наш парень, одобряем) в перспетиве еще можно персонажей добавить прикольный формат получится.
Спасибо! Я смотрел, Вы пишете в VIM. Будет здорово если расскажете, как с ним работать (у меня мозг плавится от него, хотя понимаю, что если научиться - то это ускорит работу. Очень интересно как туда вставить линтер, подсветку синтаксиса и прочее.
Primegen отличные уроки выпустил, поглядите 😊 меня вдохновил перейти пол года назад
Это просто чудесно, чудесно, мда. Нужно больше видео из серии и чтобы зеленый не ворчал)
Огонь видео! Полезно, познавательно и с юмором!
Зелёный к Халку отсылка или к Зелёному из мультфильма "Тайны третьей планеты"?
Зелёный - отсылка к неопытности)
Депенданси инжекшан, ёпта! :)))
Как программист сглаголил!
Глянул ваш проект Ботаним) было бы классно если бы книги были на английском но с пояснениями специфических терминов, не как обычно в конце книги, когда нужно каждый раз нырять и искать точный перевод, а по ходу чтения, это конечно огромный труд но я бы с удовольствием купил такую даже в ПДФке так как перевод компьютерной литературы в наших изданиях оставляет желать лучшего если мягко сказать)
Привет.
Тема для видео. Интересует распараллеливание на питоне для системы диф уров. Вот бы видосик. )))
Поддерживаю, сейчас проектную работу надо делать …. 😅 а на плюсах геморрой будет
Hello nice video!!. Can you tell me, please, this 'from typing import Protocol' statement, allows us to do type casting in Python, like TypeScript in JS?
Протоколы это неявные интерфейсы. Класс, который реализует этот интерфейс, никак с ним не связан на уровне кода, её наследует его и тп. Это не type casting.
Я бы вместо if/elif создавал бы mapping os name->callable, и получается single responsibility, либо можно naming convention сделать, и mapping не понадобится, про Darwin OS - DarwinWindow, Darwin...
Лучший!
Ура, вернулся нормальный голос)
Формат с альтер-его огонь!
Классное видео, как обычно очень позновательно, спасибо!
но с зеленым, честно говоря, очень кринжово, формат без него был лучше
Очень полезный видос! Спасибо огромное! В Чистом коде Дядишки Боба есть глава Объекты и структуры данных примерно о том же. В вашем примере возникнет сложность если необходимо будет создать другие методы. Их нужно будет дописывать в абстракции и всех других классах. Дядюшка Боб упоминает мельком паттерны Посетитель и Двойная диспетчеризация. Они имеют свои издержки, но тоже полезны иногда бывают. Это намек на видос про них если че))) Зеленый жжет)
Все хорошо, за исключением аннотаций типов для реализации гуев.
Там нужны реальные возвращаемые типы а не абстрактные протоколы.
Да
Спасибо!
А почему про Go, а не Rust?
Считаю, что было бы крайне познавательно погрузиться в его концепции с вашей помощью.
Выбрали Го в голосовании. В Ботаним участники голосуют за следующую книгу. Я на это мало влияю сейчас:)
Привет! У меня предложение по поводу того, как можно снимать подобные видео, с несколькими персонажами. С зеленым забавно, но есть предложение, как сделать видео полезнее и проще для восприятия (впрочем, вы и сейчас рассказываете доступно!) .
Сделайте двух персонажей, Теоретик и Практик. Первый - подает (сюрприз) теоритическую информацию, преимущественно так, как это дается в книгах. А второй - дает комментарии касательно: во-первых, практического использования всей этой теории, во-вторых, говорит о случаях, когда приходится от теории отходить. В идеале, чтобы вы в роли Практика приводили какие-то примеры из собственного опыта.
Интересная мысль, спасибо
А почему, например, windowsGUI не наследуется от класса GUI? Так и не понял
Наследование лучше избегать. Обычно от него больше проблем чем пользы.
Зеленый классный чувак, без него видео не было бы таким классным
привет , помоги сделать тунель wireguard на впн сервер .буду благодарен $ !
Интересное и хорошее объяснение абстрактной фабрики. Но интересно, в конкретном примере мог бы подойти паттерн "строитель"? Может есть какое-то преимущество у абстрактной фабрики перед строителем в этом примере?
здесь как раз таки строитель больше подойдет мне кажется. Потому что мы можем накидывать на окно кучу конфигураций различных. А абстрактный сразу создаст окно с дефолтными конфигами всегда.
Биполярочка наше все 🥲
Очень хотим видео по Helix 🧬 как альтернативу neovim
Алексей Николаевич, я ничего не пропустил? Вы раньше говорили, что набор в группу изучающих Пайтон начнётся к первому июля. Ежедневно захожу в Ваш Телеграмм. О наборе объявлений не было😢.
Курс еще не стартанул, если вы об этом. Я Алексей Анатольевич, если что:)
@@t0digital Извините, буду знать. Нашел в гугеле. Я именно об этом. Спасибо за ответ.
про Go будет для всех или только в Ботаним?
Движуха по книжкам в Ботаним, но вероятно какие-то материалы по go будут и на канале
Кстати, что ты думаешь про новый язык Mojo, он полностью (создатели это обещают) поддерживает совместимость с библиотеками python, добавляет строгую типизацию и решает проблему со скоростью работы (обещают что в 35000 раз будет быстрее)?🙃
А ну и конечно многопоточность)
Почему вы использовали Protocol, а не ABC?
Мне нравится наследование от абстрактных классов т.к. позволяет легко отслеживать количество реализаций, ещё это удобно т.к. легко и просто можно ознакомится с системой по автоматически стоящейся uml диаграмой связей объектов.
Где же всё таки нужен протокол я до конца не понял, как по мне его удобно использовать только в том случае если необходима только часть методов какого-то абстрактоного класса, и чтобы не было не нужных зависимостей его использовать.
Офигеть как сложно, придётся ещё пару раз посмотреть и в клуб вступить и книжек почитать.... )))
Зеленого надо тоже на чтения притащить, пусть учится :))) спасибо за видео!
Чёрный дело говорит.
А как понимать, что реализации гуи относятся именно к абстракции GUI? А если таких похожих абстракций несколько?
Анализатор типов проверяет это
@@t0digital Анализатор-то, умный. А мне как понять, какая реализация от какого протокола зависит? Это разве не ломает дзен питоновский?
@@jamuelsexonне понял вопрос
О, а я знал чувствовал потребность OCP, и применял.
Но не знал, что есть такой принцип, который преподают программистам.
Да, это один из принципов SOLID, описанных Робертом Мартином
Хех, прям сразу ассоциация с Матвеевым и его доктором дью.
По такой логике через некоторое время выпуски должен будет вести зеленый 😂
А где на канал Зелёного подписаться?
где хранить интерфейсы? есть хорошая практика?
В месте использования. А реализацию во внешнем слое. Почитайте Чистую Архитектуру Мартина, там есть об этом
👌@@t0digital
Меня часто спрашиваю кто такой Тайлер Зеленый
я так понимаю, Зеленый это результат биполярного расстройства ?
(дон хейт ми, джаст джокин)
if elif elif else зависящие от литералов можно заменить на дикт, в котором литералы - ключи, а значения - исполняемые функции.
Super
Да кто это такой, ваш Dependency Injections?! Можно про него видос?)
С зеленым прикольно, но главное не переборщить. ИМХО, такие штуки быстро надоедают
Зеленый классный! Голосую за персональный спиноф с вредными советами от Зеленого.
Состояние моей души - зелёный 😅😂
Где можно разменять один монолит на 1 млн строк кода, на 100 микросервисов по 10 000 строк кода? (Как разменять if else на абстрактную фабрику я понял, спасибо автору)
Даешь golang!
Го про другие популярные паттерны
А почему у тебя имена классов и аргументы в UpperCamelCase стиле а имена функций under_score стиле?
Имена именованных аргументов у него вообще-то тоже в snake_case
@@lagrange9343 Я наверное ошибся в терминах, но суть ясна
Имена классов в CamelCase должны быть. Имена переменных, в том числе аргументов в snake_case. PEP8
Одиночество в сети=)
Го еще
Даёшь зелёного в каждый выпуск
а когда ждать второй ютуб канал от Зеленого?
Да сюда еле уговорил его прийти!