Принципы SOLID | На примере Ruby
Вставка
- Опубліковано 14 чер 2024
- В этом видео мы поговорим о пяти принципах SOLID, которые частенько спрашивают на собеседовании. Принципы эти придумал известный разработчик Роберт Мартин ещё в 1995 году, и они актуальны до сих пор. Во-первых, мы обсудим их сущность, а, во-вторых, рассмотрим нарушение этих принципов на примерах и то, как ситуацию можно исправить.
Таймкоды:
00:00 Введение - что такое SOLID?
01:08 Некоторые общие соображения
03:33 Принцип Single responsibility
07:42 Принцип Open-closed
11:15 Принцип Liskov substitution
13:53 Принцип Interface segregation
16:32 Принцип Dependency inversion
21:40 Заключение
Станьте спонсором канала, и вы получите доступ к эксклюзивным бонусам: / @ilyabodrovkrukowski
Аккаунт Ethereum (ETH): 0x719C2d2bcC155c85190f20E1Cc3710F90FAFDa16
Boosty: boosty.to/bodrovis
Patreon: / bodrovis
DonationAlerts: www.donationalerts.com/r/bodr...
Исходный код: github.com/bodrovis-learning/...
Канал Telegram: t.me/dev_in_ruby_colors
Наш чат в Telegram: t.me/joinchat/MxYT6-01eeA1NTYy
Мой сайт: bodrovis.tech
Друзья, в код вкралась глупая ошибка (спасибо коллеге Rebbit13 за внимательность). Она никак не мешает пониманию описанных принципов, то есть объяснения остаются прежними, но всё же этот момент стоит поправить. Вот короткий коммит для исправления github.com/bodrovis-learning/Ruby-SOLID-video/commit/5914b83748d6df40b6f70f6d19c330d8d9c798e5 Суть в том, что иначе время будет печататься одно и то же, поэтому сохранять изначально нужно только префикс
ничего не понятно, но очень интересно
@@jasperhumpsman7151 А так обычно и бывает
@@jasperhumpsman7151 Мне пришло уведомление насчёт вашего вопроса, но YT его удалил (это известная проблема, с которой я ничего поделать не могу). Отвечаю тут: ну, если вам интересен Ruby, вот в этом плейлисте есть уроки с полного нуля, я их проводил для своего друга, который вообще не знаком с разработкой. ua-cam.com/video/lhRAK_bwaeo/v-deo.html Если это не подойдёт, то хорошая книга Programming Ruby на сайте pragprog, это вообще бестселлер. Также на моём канале есть "секреты классов Ruby", но это сильно на вырост. Начать надо с простых проектов, которые в Ruby с нуля предлагаются, я думаю
@@IlyaBodrovKrukowski Спасибо большое! Пост я сам удалил, потому что подумал что это "зашквар")) Посмотрю все ваши видео. Я просто столкнулся с противоречивой информацией. Очень мало качественной информации по руби в интернете, а все ютубные инфоцигане рекламируют учить корявый Js и только.
@@jasperhumpsman7151 Почему же. Вполне нормальный вопрос. JS тут вообще не нужен, конечно. Сейчас имеет смысл искать сразу инфу по Ruby 3, тк это самая свежая версия
Спасибо, Илья! Умение так доходчиво объяснять - не каждому доступний навык)
отличная подача, спасибо
не первый раз смотрю уже этот ваш видос! реально это лучшее объяснение солида, которое я видела! спасибо еще раз!)
Благодарю
Илья, очень нравится ваше изложение материала! Спасибо за труд! Всегда смотрю и подписана).
Большое спасибо за отзыв! :D
Спасибо за ваши старания!
Как всегда, на высоте) Спасибо!)
Благодарю за отзыв, буду стараться и дальше!
В последнем примере лучше было бы передавать не класс, а готовый инстанс, полностью сконфигурированный как надо, и тогда `Logger` бы не зависел ни от каких opts. Ибо opts всё же даёт некую зависимость, и вызывающая сторона должна знать о том, как реализован `printer`.
Большое спасибо за материал, подача очень четкая и последовательная. Лайк!
:D На здоровье!
Превосходно! 👏🏼👏🏼👏🏼
Благодарю!
Спасибо за видео, интересно посмотреть еще примеры с рефакторингом
Надо бы что-нибудь такое организовать, конечно
Спасибо огромное!
На здоровье!
Принципы SOLID | На примере Ruby on Rails думаю было бы полезно знать где и как решается и как не попасть на ловушку
Спасибо большое, очень наглядно
Спасибо, все супер и понятно, единственно я бы в последнем принципе расширял метод не log, а initialize (как это сделано в оригинале), так как в этом случае мы можем организовать совой поток, а не отдельно для каждого вызова log передавать необходимые атрибуты. К примеру нам нужно вывести 30 логов в 2 патока для каждого места отдельно и вызов несколько раз. В этом случае нам нужно в каждый вызов метода log передать ptinter 2+n раз не айс, а так мы организовали 2 экземпляра и просто вызвали log передав в него только message.
А по поводу строгим следованиям правил, тут я с вами на все 100% согласен! Жаль что некоторые ребята им пытаются следовать до потери пульса. Был случай, что пришлось порезать более расширяемую архитектуру в пользу SOLID, но спустя время, при сопровождении, парню занимающему более высокую позицию и зарубившему мое предложение вернуться к нему. (маленькое ликование)
Да, как вариант. Просто я хотел показать разные подходы и варианты решений. Но в целом, конечно, это не безусловная истина :) Спасибо!
Опять улетел комментарий …. Переписывать не буду. Автору благодарность и лайк
Не представляю, в чём проблема. Как говорил в прошлом видео, проблема известная и я тоже её зарепортил уже (тк это уже третий раз как минимум), но не вполне ясно, когда они это починят. Увы, понимаю, что это раздражает. support.google.com/youtube/thread/116351041/recent-reports-of-missing-comments?hl=en
clear!
Божественно. Спасибо огромное! Хоть и python'ист, но все очень просто и понятно. С помощью какой программы вы рисуете на экране?
На здоровье! Кстати, для любителей Python у меня есть отдельное видео про SOLID, возможно, будет более актуальным :) ua-cam.com/video/C8fhcHqnqyI/v-deo.html Для записи и рисования использую Camtasia Studio - это, фактически, единственный адекватный вариант для Windows
@@IlyaBodrovKrukowski Спасибо за ответ. Видео про SOLID в Python уже посмотрел :)
@@grandlagging0zero175 Отлично :DD Ну, по Python кое-что ещё есть на канале (программка для создания скриншотов), но пока в основном Ruby/JS. Возможно, в будущем больше про питон будет, посмотрим
@@IlyaBodrovKrukowskiТакой вопрос возник. В описании не нашел кода(ссылки на репозиторий git) из принципов SOLID видео по python или ruby. У Вас он есть?
@@grandlagging0zero175 Да, правильное замечание! Создал два репозитария, ссылки тоже добавил. Ruby: github.com/bodrovis-learning/Ruby-SOLID-video/tree/master Python: github.com/bodrovis-learning/Python-SOLID-video/tree/master
Спасибо за видео! Хотелось бы узнать, как хранить мультимедийные файлы в базе, и как их потом проигрывать. Например, музыкальные файлы. На примере какого-то простого приложения хранения и воспроизведения музыки.
Как и любые другие, на самом деле. Просто сделать обычный загрузчик (решений для Rails полно: хотя бы Shrine тот же), сохранять эти файлы, а потом просто сделать плеер на странице. Когда-то я писал похожую статью, только там посложнее (мы делали радио), но идею понять можно, я думаю www.digitalocean.com/community/tutorials/creating-online-streaming-radio-with-rails-and-icecast
@@IlyaBodrovKrukowski Спасибо за ответ! Интересная статья, попробую повторить все изложенное.