Абстрактная фабрика. Паттерны проектирования - обмен простоты на гибкость?

  Рет қаралды 36,118

Диджитализируй!

Диджитализируй!

7 ай бұрын

Поговорим о паттернах вообще и о паттерне Абстрактная фабрика в частности!
Мой курс «Хардкорная веб-разработка» - 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...

Пікірлер: 206
@andreyduke_kz4882
@andreyduke_kz4882 7 ай бұрын
Зеленый - чудный парень! Все время правильные вещи подсказывает. Как без него раньше то обходился? )
@t0digital
@t0digital 7 ай бұрын
Тоже рад, что он присоединился!
@Nifacy55
@Nifacy55 7 ай бұрын
Очень понравилась идея с "зелёным"! Идеи, описанные Алексеем в конце видео, просты, но их понимание становится очевидным только с опытом. Ощущение, как будто "зелёный" - все те вопросы и недопонимание, возникающие у новичков, погружающихся в тему паттернов. Как раз из-за них и возникает 2 "лагеря": зелёный и Алексей в первой части видео, который все свои решения аргументировал как "ну так красиво". И как раз в конце Алексей и говорит "истину" - оба лагеря не правы, так как важно соблюдать баланс. Побольше бы такого контента, думающего про зрителя и его возможных вопросах 😊❤
@leonwew
@leonwew Ай бұрын
На самом деле зеленый отличная задумка! Добавляет юморка в видео. Это отлично помогает сфокусироваться и не поймать скуку. Лично у меня проблема с этим. Если видео монотонное - то не важно на сколько оно информативное. Скорее всего я ничего не пойму и не запомню. Круто придумал!
@BusinguZ
@BusinguZ 7 ай бұрын
Очень круто! Можешь снять больше видео про паттерны проектирования?
@YaroslavNovichkov
@YaroslavNovichkov 3 ай бұрын
Велкам ту ботаним)
@fantast2568
@fantast2568 7 ай бұрын
Спасибо большое, приятно смотреть твои видео, от тебя заряжает позитивом и отношением к программированию как к искусству а не как к работе ❤❤❤
@heisenberg6874
@heisenberg6874 7 ай бұрын
обожаю формат твоих видео - всё как нужно: сразу к делу, трудные концепции простым языком по полочкам, дружественная обстановка. всем рекомендую твой канал, все довольны. спасибо за контент!)
@nehz_ttv
@nehz_ttv 7 ай бұрын
Лучшее объяснение абстрактной фабрики!
@rishat7620
@rishat7620 7 ай бұрын
Классно раскидал, полиморфизм на месте! А Зелёный - вощщще огонь, епте)
@user-eo2gz5yz7x
@user-eo2gz5yz7x 7 ай бұрын
Очень полезно и интересно, спасибо Алексею и зеленому
@DrillingEnglish
@DrillingEnglish 7 ай бұрын
Наконец то снова стали выходить видео! Уже соскучились! 🎉
@uicodeuz
@uicodeuz 7 ай бұрын
Кайф, успехов вам ❤
@dino933103
@dino933103 7 ай бұрын
Шикарно! Объединил программирование и формат скетча. Зеленый, говорящий про Dependency Injection и что все сложно - великолепно.
@dmitry.burnaev
@dmitry.burnaev 7 ай бұрын
Спасибо большое! Крутое видео и шикарная подача материала 👍
@user-oi1zl6de8i
@user-oi1zl6de8i 7 ай бұрын
Прекрасное объяснение. Автору спасибо!
@pylounge
@pylounge 7 ай бұрын
Как похорошел зелёный из M&M’s при Алексее!
@eduardtkachuk
@eduardtkachuk 7 ай бұрын
Отличный пример, спасибо! 🙂
@maksimmaxmotives4271
@maksimmaxmotives4271 7 ай бұрын
Очень крутой формат и тема здоровская! Продолжайте в том же духе:)
@user-ly6jh3pc6z
@user-ly6jh3pc6z 7 ай бұрын
Ура! Ты возвращайся
@bukanaka
@bukanaka 7 ай бұрын
Просто смотреть приятно и лампово, не говоря, уже о пользе).
@user-hp9ly9qx3p
@user-hp9ly9qx3p 7 ай бұрын
Классная подача материала! Зеленый - просто изюминка))
@user-qp7uv2ip7x
@user-qp7uv2ip7x 7 ай бұрын
Спасибо, отличное видео, по отличной теме! Но окошки на холодосе - это конечно успех ))
@user-ci8yo4yr7s
@user-ci8yo4yr7s 7 ай бұрын
Спасибо за материал. Очень полезно! Хотелось бы продолжение сериала Паттерны с серией на каждый 👍
@TieoZ
@TieoZ 7 ай бұрын
Даёшь больше зелёного что бы он сам изначальный код писал, который потом ты рефакторишь, и зелёного можно ещё рептилоидом назвать, потому что они правят миром, причём глядя на средний код так точно)
@mailvoodoo
@mailvoodoo 7 ай бұрын
Спасибо! С "Зеленым чуваком" вообще - огонь! Хотелось бы еще про паттерны. 👍
@user-wz5eq1sv7i
@user-wz5eq1sv7i 7 ай бұрын
конфликт с зелёным выглядит кринжовенько, но только в моменты, когда это именно конфликт :)) когда это просто "слишком умный" комментатор, прям идеально, прям нравица
@leomysky
@leomysky 7 ай бұрын
Отличное видео, отличная работа
@user-qd9ur2vp7x
@user-qd9ur2vp7x 7 ай бұрын
Очень интересно, спсибо!
@yurydorozhko6094
@yurydorozhko6094 7 ай бұрын
Отличная подача материала. Для меня, программирующего время от времени, все выглядит предельно ясно и понятно, даже мотивирует руководствоваться именно таким принципом программирования. Продолжай, пожалуйста, в таком же стиле с другом критиком.
@t0digital
@t0digital 7 ай бұрын
Спасибо!
@umni_kot
@umni_kot 7 ай бұрын
отличное видео, спасибо!
@herypankipythondeveloper3753
@herypankipythondeveloper3753 7 ай бұрын
Здравствуйте, спасибо за видео! Очень жду ваш курс, когда планируете его выпускать? :)
@dmitriyneledva4693
@dmitriyneledva4693 7 ай бұрын
Лучший канал на этом сайте :)
@dasfering7683
@dasfering7683 7 ай бұрын
Пожалуйста побольше про абстракции и паттерны
@Vorono4ka
@Vorono4ka 7 ай бұрын
Растеееете! Качество видео классное, понравилось, что добавили зеленого. Вы читали какие-то книжки по монтажу, свету и сьемке? Можете посоветовать? 😅
@KA3AHOBA94
@KA3AHOBA94 7 ай бұрын
ооооо наконец то. Как раз можно сделать GUI для примеров паттерна.
@andrewbondaryuk
@andrewbondaryuk 7 ай бұрын
GUI остаётся САМЫМ лучшим применением ООП. Во многих остальных случаях его применение имеет массу нюансов 😀
@clauseclause6640
@clauseclause6640 7 ай бұрын
Пожелания и предложения - реализовывать вместо if elif через dict, так и быстрее работает (вместо n сравнений 1 соответствие по хэшу) и не меняется основной код (дикт в данном случае плагин). Ну и еще пачка if elif не заменяет else, а вот операционнка другая может оказаться и падение будет с невнятной ошибкой о переменной gui использованной до объявления... не хорошо
@t0digital
@t0digital 7 ай бұрын
Касательно ошибки - это ж не продакшн код, а демо паттерна.
@silseleum
@silseleum 7 ай бұрын
Круть! Только вчера незаметно для себя изобрел этот паттерн, а сегодня вот узнал что его уже изобрели(
@Vasilii_Furi
@Vasilii_Furi 7 ай бұрын
Лучший!
@pavel_shech
@pavel_shech 7 ай бұрын
Лайк авансом!)
@artur8539
@artur8539 7 ай бұрын
Видео нужны чаще!
@Cyber-X
@Cyber-X 7 ай бұрын
Лайк однозначно за зеленого)))
@user-jf5hq7ve8c
@user-jf5hq7ve8c 7 ай бұрын
Жду все остальные 20 паттернов от вас))
@arnowt
@arnowt 7 ай бұрын
Мне больше нравиться, вариант когда есть один класс обертка, а конкретная реализация вызывается в его конструкторе. Но в любом случае ООП хорошо в меру, сколько раз(правда на пхп) приходилось править код и без удаленного дебага не возможно понять какой кусок кода исполняется, а потом ищи все остальные варианты и правь там(автор всей этой красоты давно уволился и после него ещё человек 5 занимались поддержкой, каждый со своим пониманием красоты), причём некоторые варианты не более чем фантомные(никогда не работают). А потом выгребай ошибки, неделями. В итоге по опыту иф-элс правится, в разы быстрее, надёжнее и главное под силу даже начинающему мидлу.
@ali_qarasuv
@ali_qarasuv 6 ай бұрын
Формат видео очень крутой)
@t0digital
@t0digital 6 ай бұрын
Спасибо!
@anton_medvedev_it_life
@anton_medvedev_it_life 5 ай бұрын
Паттерны это круто! У меня часто, когда узнаю что-то новое, потом хочется его запихнуть куда-нибудь. В конечном счете понял, что это опасное желание. Порой лучше просто знать, что есть паттерны и какие они, чтобы применить вовремя. Таким запихиванием, лишь бы применить я много раз себе жизнь усложнил в простейших проектах :-D Благодарю за видео
@gaxeliy
@gaxeliy 7 ай бұрын
Я все ждал, когда в конце окажется, что Зеленый - это настоящий автор канала, а Черный - абстрактный собирательный гротескный образ, который рассказывает как НЕ надо.
@comparison9436
@comparison9436 Ай бұрын
у меня вопрос. Если добавилась новая реализация RefrigeratorGui, но у него в методах добавлены или еще хуже изменены входящие аргументы, то что делать тогда? Допустим в метод create_window() добавляется новая переменная background (просто для примера). То что тогда делать? Помогите пожалуйста!
@sikelmon
@sikelmon 7 ай бұрын
Привет. Тема для видео. Интересует распараллеливание на питоне для системы диф уров. Вот бы видосик. )))
@user-vg4lp5ox7f
@user-vg4lp5ox7f 7 ай бұрын
Поддерживаю, сейчас проектную работу надо делать …. 😅 а на плюсах геморрой будет
@pyquent
@pyquent 6 ай бұрын
Можешь на досуге записать ролик про основы Git? Искал, но ничего конкретного на эту тему не нашел.
@widgeton
@widgeton 7 ай бұрын
Очень полезный видос! Спасибо огромное! В Чистом коде Дядишки Боба есть глава Объекты и структуры данных примерно о том же. В вашем примере возникнет сложность если необходимо будет создать другие методы. Их нужно будет дописывать в абстракции и всех других классах. Дядюшка Боб упоминает мельком паттерны Посетитель и Двойная диспетчеризация. Они имеют свои издержки, но тоже полезны иногда бывают. Это намек на видос про них если че))) Зеленый жжет)
@Paradise_Box
@Paradise_Box 7 ай бұрын
Депенданси инжекшан, ёпта! :)))
@Nabokka
@Nabokka 7 ай бұрын
Как программист сглаголил!
@1966Radislav
@1966Radislav 6 ай бұрын
Глянул ваш проект Ботаним) было бы классно если бы книги были на английском но с пояснениями специфических терминов, не как обычно в конце книги, когда нужно каждый раз нырять и искать точный перевод, а по ходу чтения, это конечно огромный труд но я бы с удовольствием купил такую даже в ПДФке так как перевод компьютерной литературы в наших изданиях оставляет желать лучшего если мягко сказать)
@midlifecode
@midlifecode 7 ай бұрын
Спасибо! Я смотрел, Вы пишете в VIM. Будет здорово если расскажете, как с ним работать (у меня мозг плавится от него, хотя понимаю, что если научиться - то это ускорит работу. Очень интересно как туда вставить линтер, подсветку синтаксиса и прочее.
@hakooplayplay3212
@hakooplayplay3212 7 ай бұрын
Primegen отличные уроки выпустил, поглядите 😊 меня вдохновил перейти пол года назад
@ashotvantsyan9028
@ashotvantsyan9028 7 ай бұрын
Я бы вместо if/elif создавал бы mapping os name->callable, и получается single responsibility, либо можно naming convention сделать, и mapping не понадобится, про Darwin OS - DarwinWindow, Darwin...
@krasoffski
@krasoffski 7 ай бұрын
Все хорошо, за исключением аннотаций типов для реализации гуев. Там нужны реальные возвращаемые типы а не абстрактные протоколы.
@t0digital
@t0digital 7 ай бұрын
Да
@user-xd3px1hf6h
@user-xd3px1hf6h 7 ай бұрын
Ура, вернулся нормальный голос)
@valk9819
@valk9819 7 ай бұрын
Это просто чудесно, чудесно, мда. Нужно больше видео из серии и чтобы зеленый не ворчал)
@captainkryuk1899
@captainkryuk1899 7 ай бұрын
Классное видео, как обычно очень позновательно, спасибо! но с зеленым, честно говоря, очень кринжово, формат без него был лучше
@user-zb8cc2wy1x
@user-zb8cc2wy1x 7 ай бұрын
расчехлили абстрактную фабрику на полную колбасу, зелёный наш парень, одобряем) в перспетиве еще можно персонажей добавить прикольный формат получится.
@Huginn2008
@Huginn2008 7 ай бұрын
Огонь видео! Полезно, познавательно и с юмором! Зелёный к Халку отсылка или к Зелёному из мультфильма "Тайны третьей планеты"?
@user-xc4kd9fl9n
@user-xc4kd9fl9n 7 ай бұрын
Зелёный - отсылка к неопытности)
@kaz_breaker
@kaz_breaker 4 ай бұрын
Зелёному из конца видео хочется ответить: простое лучше, чем сложное, хотя сложное лучше, чем запутанное
@user-us7eb8bi9l
@user-us7eb8bi9l 7 ай бұрын
Чёрный дело говорит.
@yaroslavbox1249
@yaroslavbox1249 6 ай бұрын
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?
@t0digital
@t0digital 6 ай бұрын
Протоколы это неявные интерфейсы. Класс, который реализует этот интерфейс, никак с ним не связан на уровне кода, её наследует его и тп. Это не type casting.
@IT-ij6le
@IT-ij6le 29 күн бұрын
снимай больше про паттерны)
@BadShowChannel
@BadShowChannel 7 ай бұрын
можно видео только с зеленым минут на 12?
@matiiv25
@matiiv25 7 ай бұрын
Формат с альтер-его огонь!
@MrSunchezz
@MrSunchezz 7 ай бұрын
Спасибо! А почему про Go, а не Rust? Считаю, что было бы крайне познавательно погрузиться в его концепции с вашей помощью.
@t0digital
@t0digital 7 ай бұрын
Выбрали Го в голосовании. В Ботаним участники голосуют за следующую книгу. Я на это мало влияю сейчас:)
@khanbekov.b
@khanbekov.b 6 ай бұрын
Привет! У меня предложение по поводу того, как можно снимать подобные видео, с несколькими персонажами. С зеленым забавно, но есть предложение, как сделать видео полезнее и проще для восприятия (впрочем, вы и сейчас рассказываете доступно!) . Сделайте двух персонажей, Теоретик и Практик. Первый - подает (сюрприз) теоритическую информацию, преимущественно так, как это дается в книгах. А второй - дает комментарии касательно: во-первых, практического использования всей этой теории, во-вторых, говорит о случаях, когда приходится от теории отходить. В идеале, чтобы вы в роли Практика приводили какие-то примеры из собственного опыта.
@t0digital
@t0digital 6 ай бұрын
Интересная мысль, спасибо
@viooi2582
@viooi2582 7 ай бұрын
Кстати, что ты думаешь про новый язык Mojo, он полностью (создатели это обещают) поддерживает совместимость с библиотеками python, добавляет строгую типизацию и решает проблему со скоростью работы (обещают что в 35000 раз будет быстрее)?🙃
@viooi2582
@viooi2582 7 ай бұрын
А ну и конечно многопоточность)
@magnumopus1002
@magnumopus1002 7 ай бұрын
Очень хотим видео по Helix 🧬 как альтернативу neovim
@Den-np7tv
@Den-np7tv 7 ай бұрын
А почему, например, windowsGUI не наследуется от класса GUI? Так и не понял
@hakooplayplay3212
@hakooplayplay3212 7 ай бұрын
Наследование лучше избегать. Обычно от него больше проблем чем пользы.
@user-bd9bf5kw3l
@user-bd9bf5kw3l 7 ай бұрын
Почему вы использовали Protocol, а не ABC? Мне нравится наследование от абстрактных классов т.к. позволяет легко отслеживать количество реализаций, ещё это удобно т.к. легко и просто можно ознакомится с системой по автоматически стоящейся uml диаграмой связей объектов. Где же всё таки нужен протокол я до конца не понял, как по мне его удобно использовать только в том случае если необходима только часть методов какого-то абстрактоного класса, и чтобы не было не нужных зависимостей его использовать.
@dnk363
@dnk363 2 ай бұрын
Интересное и хорошее объяснение абстрактной фабрики. Но интересно, в конкретном примере мог бы подойти паттерн "строитель"? Может есть какое-то преимущество у абстрактной фабрики перед строителем в этом примере?
@comparison9436
@comparison9436 Ай бұрын
здесь как раз таки строитель больше подойдет мне кажется. Потому что мы можем накидывать на окно кучу конфигураций различных. А абстрактный сразу создаст окно с дефолтными конфигами всегда.
@user-ts2wy7he4p
@user-ts2wy7he4p 7 ай бұрын
Зеленого надо тоже на чтения притащить, пусть учится :))) спасибо за видео!
@uplineshop4587
@uplineshop4587 6 ай бұрын
привет , помоги сделать тунель wireguard на впн сервер .буду благодарен $ !
@jamuelsexon
@jamuelsexon 7 ай бұрын
А как понимать, что реализации гуи относятся именно к абстракции GUI? А если таких похожих абстракций несколько?
@t0digital
@t0digital 7 ай бұрын
Анализатор типов проверяет это
@jamuelsexon
@jamuelsexon 7 ай бұрын
@@t0digital Анализатор-то, умный. А мне как понять, какая реализация от какого протокола зависит? Это разве не ломает дзен питоновский?
@t0digital
@t0digital 7 ай бұрын
​@@jamuelsexonне понял вопрос
@zakirovio
@zakirovio 7 ай бұрын
где хранить интерфейсы? есть хорошая практика?
@t0digital
@t0digital 7 ай бұрын
В месте использования. А реализацию во внешнем слое. Почитайте Чистую Архитектуру Мартина, там есть об этом
@zakirovio
@zakirovio 7 ай бұрын
👌@@t0digital
@user-mo9op9xh6f
@user-mo9op9xh6f 7 ай бұрын
Алексей Николаевич, я ничего не пропустил? Вы раньше говорили, что набор в группу изучающих Пайтон начнётся к первому июля. Ежедневно захожу в Ваш Телеграмм. О наборе объявлений не было😢.
@t0digital
@t0digital 7 ай бұрын
Курс еще не стартанул, если вы об этом. Я Алексей Анатольевич, если что:)
@user-mo9op9xh6f
@user-mo9op9xh6f 7 ай бұрын
@@t0digital Извините, буду знать. Нашел в гугеле. Я именно об этом. Спасибо за ответ.
@sergeyfedor45
@sergeyfedor45 7 ай бұрын
про Go будет для всех или только в Ботаним?
@t0digital
@t0digital 7 ай бұрын
Движуха по книжкам в Ботаним, но вероятно какие-то материалы по go будут и на канале
@myhomework2431
@myhomework2431 7 ай бұрын
Хех, прям сразу ассоциация с Матвеевым и его доктором дью. По такой логике через некоторое время выпуски должен будет вести зеленый 😂
@user-st8yr6wy9y
@user-st8yr6wy9y 7 ай бұрын
Super
@maksimkuznetsov2132
@maksimkuznetsov2132 7 ай бұрын
О, а я знал чувствовал потребность OCP, и применял. Но не знал, что есть такой принцип, который преподают программистам.
@t0digital
@t0digital 7 ай бұрын
Да, это один из принципов SOLID, описанных Робертом Мартином
@youtubeyoutube6205
@youtubeyoutube6205 7 ай бұрын
Зеленый классный чувак, без него видео не было бы таким классным
@alexseydugin8109
@alexseydugin8109 7 ай бұрын
Меня часто спрашиваю кто такой Тайлер Зеленый
@plkvp
@plkvp 7 ай бұрын
А где на канал Зелёного подписаться?
@silseleum
@silseleum 7 ай бұрын
С зеленым прикольно, но главное не переборщить. ИМХО, такие штуки быстро надоедают
@Ssilki_V_Profile
@Ssilki_V_Profile 6 ай бұрын
if elif elif else зависящие от литералов можно заменить на дикт, в котором литералы - ключи, а значения - исполняемые функции.
@abtokarev
@abtokarev 7 ай бұрын
Зеленый классный! Голосую за персональный спиноф с вредными советами от Зеленого.
@wemakoz
@wemakoz 7 ай бұрын
я так понимаю, Зеленый это результат биполярного расстройства ? (дон хейт ми, джаст джокин)
@s_ivanov179
@s_ivanov179 7 ай бұрын
Состояние моей души - зелёный 😅😂
@mslq
@mslq 7 ай бұрын
Офигеть как сложно, придётся ещё пару раз посмотреть и в клуб вступить и книжек почитать.... )))
@HananoKairo
@HananoKairo 7 ай бұрын
Зеленый - интересная задумка. Упрощает и уинтересняет видео. Одно только не понял - это для какого уровня видео? Для начинающих архитекторов, для мидлов, для меня?
@t0digital
@t0digital 7 ай бұрын
Это исключительно для вас! :)
@HananoKairo
@HananoKairo 7 ай бұрын
@@t0digital а что делать если зеленый умнее меня?)
@t0digital
@t0digital 7 ай бұрын
Почитать книжки сначала по одному языку, например, питону, проедать задачки по нему, изучать какой-то фреймворк аля джанго и или фастапи, потом почитать чистый код Мартина и потом возможно паттерны. Совершенный код Макконнелла еще
@HananoKairo
@HananoKairo 7 ай бұрын
@@t0digital спасибо. Все до фреймворка я уже сделал, осталось только 2 последние книжки
@mtigames188
@mtigames188 5 ай бұрын
Да кто это такой, ваш Dependency Injections?! Можно про него видос?)
@apostol_fet
@apostol_fet 5 ай бұрын
Где можно разменять один монолит на 1 млн строк кода, на 100 микросервисов по 10 000 строк кода? (Как разменять if else на абстрактную фабрику я понял, спасибо автору)
@Chumachech
@Chumachech 7 ай бұрын
А почему у тебя имена классов и аргументы в UpperCamelCase стиле а имена функций under_score стиле?
@lagrange9343
@lagrange9343 7 ай бұрын
Имена именованных аргументов у него вообще-то тоже в snake_case
@Chumachech
@Chumachech 7 ай бұрын
@@lagrange9343 Я наверное ошибся в терминах, но суть ясна
@t0digital
@t0digital 7 ай бұрын
Имена классов в CamelCase должны быть. Имена переменных, в том числе аргументов в snake_case. PEP8
@self_lionized
@self_lionized 6 ай бұрын
Го про другие популярные паттерны
@Antonio-ib6ii
@Antonio-ib6ii 7 ай бұрын
Зелёный это Масаня?
@h3ckphy246
@h3ckphy246 7 ай бұрын
Го еще
@skycheron
@skycheron 7 ай бұрын
Даешь golang!
@Iaxls
@Iaxls 7 ай бұрын
К контенту нет вопросов, все супер. Но приветствие пора менять. Ну что за "котаны", не SOLIDно как-то!😄
@andrewbondaryuk
@andrewbondaryuk 7 ай бұрын
Как там в психиатрии называется, когда у человека две и более личности? :) p.s. почему go, а не rust?
@t0digital
@t0digital 7 ай бұрын
Книги голосованием выбираются, выбрали Go
The Worlds Most Powerfull Batteries !
00:48
Woody & Kleiny
Рет қаралды 24 МЛН
КАРМАНЧИК 2 СЕЗОН 6 СЕРИЯ
21:57
Inter Production
Рет қаралды 487 М.
Архитектура ПО, MVC и бизнес-логика. Критика Django
20:26
Диджитализируй!
Рет қаралды 74 М.
G.R.A.S.P | шаблоны проектирования
12:09
Надо ли учить шаблоны проектирования
11:48
EngineerSpock - IT & программирование
Рет қаралды 7 М.