Абстрактная фабрика. Паттерны проектирования - обмен простоты на гибкость?
Вставка
- Опубліковано 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 остаётся САМЫМ лучшим применением ООП. Во многих остальных случаях его применение имеет массу нюансов 😀
Лайк однозначно за зеленого)))
Лайк авансом!)
Видео нужны чаще!
Растеееете! Качество видео классное, понравилось, что добавили зеленого. Вы читали какие-то книжки по монтажу, свету и сьемке? Можете посоветовать? 😅
Паттерны это круто! У меня часто, когда узнаю что-то новое, потом хочется его запихнуть куда-нибудь. В конечном счете понял, что это опасное желание. Порой лучше просто знать, что есть паттерны и какие они, чтобы применить вовремя. Таким запихиванием, лишь бы применить я много раз себе жизнь усложнил в простейших проектах :-D
Благодарю за видео
Лучший!
Здравствуйте, спасибо за видео! Очень жду ваш курс, когда планируете его выпускать? :)
Мне больше нравиться, вариант когда есть один класс обертка, а конкретная реализация вызывается в его конструкторе.
Но в любом случае ООП хорошо в меру, сколько раз(правда на пхп) приходилось править код и без удаленного дебага не возможно понять какой кусок кода исполняется, а потом ищи все остальные варианты и правь там(автор всей этой красоты давно уволился и после него ещё человек 5 занимались поддержкой, каждый со своим пониманием красоты), причём некоторые варианты не более чем фантомные(никогда не работают). А потом выгребай ошибки, неделями. В итоге по опыту иф-элс правится, в разы быстрее, надёжнее и главное под силу даже начинающему мидлу.
Ура, вернулся нормальный голос)
Я все ждал, когда в конце окажется, что Зеленый - это настоящий автор канала, а Черный - абстрактный собирательный гротескный образ, который рассказывает как НЕ надо.
снимай больше про паттерны)
Депенданси инжекшан, ёпта! :)))
Как программист сглаголил!
можно видео только с зеленым минут на 12?
Привет! У меня предложение по поводу того, как можно снимать подобные видео, с несколькими персонажами. С зеленым забавно, но есть предложение, как сделать видео полезнее и проще для восприятия (впрочем, вы и сейчас рассказываете доступно!) .
Сделайте двух персонажей, Теоретик и Практик. Первый - подает (сюрприз) теоритическую информацию, преимущественно так, как это дается в книгах. А второй - дает комментарии касательно: во-первых, практического использования всей этой теории, во-вторых, говорит о случаях, когда приходится от теории отходить. В идеале, чтобы вы в роли Практика приводили какие-то примеры из собственного опыта.
Интересная мысль, спасибо
Чёрный дело говорит.
Формат с альтер-его огонь!
Привет.
Тема для видео. Интересует распараллеливание на питоне для системы диф уров. Вот бы видосик. )))
Поддерживаю, сейчас проектную работу надо делать …. 😅 а на плюсах геморрой будет
Это просто чудесно, чудесно, мда. Нужно больше видео из серии и чтобы зеленый не ворчал)
Очень полезный видос! Спасибо огромное! В Чистом коде Дядишки Боба есть глава Объекты и структуры данных примерно о том же. В вашем примере возникнет сложность если необходимо будет создать другие методы. Их нужно будет дописывать в абстракции и всех других классах. Дядюшка Боб упоминает мельком паттерны Посетитель и Двойная диспетчеризация. Они имеют свои издержки, но тоже полезны иногда бывают. Это намек на видос про них если че))) Зеленый жжет)
Классное видео, как обычно очень позновательно, спасибо!
но с зеленым, честно говоря, очень кринжово, формат без него был лучше
у меня вопрос. Если добавилась новая реализация RefrigeratorGui, но у него в методах добавлены или еще хуже изменены входящие аргументы, то что делать тогда? Допустим в метод create_window() добавляется новая переменная background (просто для примера). То что тогда делать? Помогите пожалуйста!
Все хорошо, за исключением аннотаций типов для реализации гуев.
Там нужны реальные возвращаемые типы а не абстрактные протоколы.
Да
Зелёному из конца видео хочется ответить: простое лучше, чем сложное, хотя сложное лучше, чем запутанное
Глянул ваш проект Ботаним) было бы классно если бы книги были на английском но с пояснениями специфических терминов, не как обычно в конце книги, когда нужно каждый раз нырять и искать точный перевод, а по ходу чтения, это конечно огромный труд но я бы с удовольствием купил такую даже в ПДФке так как перевод компьютерной литературы в наших изданиях оставляет желать лучшего если мягко сказать)
Интересное и хорошее объяснение абстрактной фабрики. Но интересно, в конкретном примере мог бы подойти паттерн "строитель"? Может есть какое-то преимущество у абстрактной фабрики перед строителем в этом примере?
здесь как раз таки строитель больше подойдет мне кажется. Потому что мы можем накидывать на окно кучу конфигураций различных. А абстрактный сразу создаст окно с дефолтными конфигами всегда.
расчехлили абстрактную фабрику на полную колбасу, зелёный наш парень, одобряем) в перспетиве еще можно персонажей добавить прикольный формат получится.
Я бы вместо if/elif создавал бы mapping os name->callable, и получается single responsibility, либо можно naming convention сделать, и mapping не понадобится, про Darwin OS - DarwinWindow, Darwin...
Спасибо! Я смотрел, Вы пишете в VIM. Будет здорово если расскажете, как с ним работать (у меня мозг плавится от него, хотя понимаю, что если научиться - то это ускорит работу. Очень интересно как туда вставить линтер, подсветку синтаксиса и прочее.
Primegen отличные уроки выпустил, поглядите 😊 меня вдохновил перейти пол года назад
Можешь на досуге записать ролик про основы Git? Искал, но ничего конкретного на эту тему не нашел.
Огонь видео! Полезно, познавательно и с юмором!
Зелёный к Халку отсылка или к Зелёному из мультфильма "Тайны третьей планеты"?
Зелёный - отсылка к неопытности)
Зеленый классный чувак, без него видео не было бы таким классным
О, а я знал чувствовал потребность OCP, и применял.
Но не знал, что есть такой принцип, который преподают программистам.
Да, это один из принципов SOLID, описанных Робертом Мартином
Спасибо!
А почему про Go, а не Rust?
Считаю, что было бы крайне познавательно погрузиться в его концепции с вашей помощью.
Выбрали Го в голосовании. В Ботаним участники голосуют за следующую книгу. Я на это мало влияю сейчас:)
Биполярочка наше все 🥲
Super
Кстати, что ты думаешь про новый язык Mojo, он полностью (создатели это обещают) поддерживает совместимость с библиотеками python, добавляет строгую типизацию и решает проблему со скоростью работы (обещают что в 35000 раз будет быстрее)?🙃
А ну и конечно многопоточность)
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.
где хранить интерфейсы? есть хорошая практика?
В месте использования. А реализацию во внешнем слое. Почитайте Чистую Архитектуру Мартина, там есть об этом
👌@@t0digital
Зеленого надо тоже на чтения притащить, пусть учится :))) спасибо за видео!
Очень хотим видео по Helix 🧬 как альтернативу neovim
А почему, например, windowsGUI не наследуется от класса GUI? Так и не понял
Наследование лучше избегать. Обычно от него больше проблем чем пользы.
про Go будет для всех или только в Ботаним?
Движуха по книжкам в Ботаним, но вероятно какие-то материалы по go будут и на канале
Алексей Николаевич, я ничего не пропустил? Вы раньше говорили, что набор в группу изучающих Пайтон начнётся к первому июля. Ежедневно захожу в Ваш Телеграмм. О наборе объявлений не было😢.
Курс еще не стартанул, если вы об этом. Я Алексей Анатольевич, если что:)
@@t0digital Извините, буду знать. Нашел в гугеле. Я именно об этом. Спасибо за ответ.
if elif elif else зависящие от литералов можно заменить на дикт, в котором литералы - ключи, а значения - исполняемые функции.
Хех, прям сразу ассоциация с Матвеевым и его доктором дью.
По такой логике через некоторое время выпуски должен будет вести зеленый 😂
Зеленый классный! Голосую за персональный спиноф с вредными советами от Зеленого.
А как понимать, что реализации гуи относятся именно к абстракции GUI? А если таких похожих абстракций несколько?
Анализатор типов проверяет это
@@t0digital Анализатор-то, умный. А мне как понять, какая реализация от какого протокола зависит? Это разве не ломает дзен питоновский?
@@jamuelsexonне понял вопрос
Да кто это такой, ваш Dependency Injections?! Можно про него видос?)
привет , помоги сделать тунель wireguard на впн сервер .буду благодарен $ !
Почему вы использовали Protocol, а не ABC?
Мне нравится наследование от абстрактных классов т.к. позволяет легко отслеживать количество реализаций, ещё это удобно т.к. легко и просто можно ознакомится с системой по автоматически стоящейся uml диаграмой связей объектов.
Где же всё таки нужен протокол я до конца не понял, как по мне его удобно использовать только в том случае если необходима только часть методов какого-то абстрактоного класса, и чтобы не было не нужных зависимостей его использовать.
Меня часто спрашиваю кто такой Тайлер Зеленый
Офигеть как сложно, придётся ещё пару раз посмотреть и в клуб вступить и книжек почитать.... )))
я так понимаю, Зеленый это результат биполярного расстройства ?
(дон хейт ми, джаст джокин)
А где на канал Зелёного подписаться?
Где можно разменять один монолит на 1 млн строк кода, на 100 микросервисов по 10 000 строк кода? (Как разменять if else на абстрактную фабрику я понял, спасибо автору)
С зеленым прикольно, но главное не переборщить. ИМХО, такие штуки быстро надоедают
Даешь golang!
а когда ждать второй ютуб канал от Зеленого?
Да сюда еле уговорил его прийти!
Состояние моей души - зелёный 😅😂
Го про другие популярные паттерны
Зеленый - интересная задумка. Упрощает и уинтересняет видео. Одно только не понял - это для какого уровня видео? Для начинающих архитекторов, для мидлов, для меня?
Это исключительно для вас! :)
@@t0digital а что делать если зеленый умнее меня?)
Почитать книжки сначала по одному языку, например, питону, проедать задачки по нему, изучать какой-то фреймворк аля джанго и или фастапи, потом почитать чистый код Мартина и потом возможно паттерны. Совершенный код Макконнелла еще
@@t0digital спасибо. Все до фреймворка я уже сделал, осталось только 2 последние книжки
А почему у тебя имена классов и аргументы в UpperCamelCase стиле а имена функций under_score стиле?
Имена именованных аргументов у него вообще-то тоже в snake_case
@@lagrange9343 Я наверное ошибся в терминах, но суть ясна
Имена классов в CamelCase должны быть. Имена переменных, в том числе аргументов в snake_case. PEP8
Го еще
Одиночество в сети=)