Принципы 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

КОМЕНТАРІ • 53

  • @IlyaBodrovKrukowski
    @IlyaBodrovKrukowski  2 роки тому +3

    Друзья, в код вкралась глупая ошибка (спасибо коллеге Rebbit13 за внимательность). Она никак не мешает пониманию описанных принципов, то есть объяснения остаются прежними, но всё же этот момент стоит поправить. Вот короткий коммит для исправления github.com/bodrovis-learning/Ruby-SOLID-video/commit/5914b83748d6df40b6f70f6d19c330d8d9c798e5 Суть в том, что иначе время будет печататься одно и то же, поэтому сохранять изначально нужно только префикс

    • @jasperhumpsman7151
      @jasperhumpsman7151 Рік тому

      ничего не понятно, но очень интересно

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      @@jasperhumpsman7151 А так обычно и бывает

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      @@jasperhumpsman7151 Мне пришло уведомление насчёт вашего вопроса, но YT его удалил (это известная проблема, с которой я ничего поделать не могу). Отвечаю тут: ну, если вам интересен Ruby, вот в этом плейлисте есть уроки с полного нуля, я их проводил для своего друга, который вообще не знаком с разработкой. ua-cam.com/video/lhRAK_bwaeo/v-deo.html Если это не подойдёт, то хорошая книга Programming Ruby на сайте pragprog, это вообще бестселлер. Также на моём канале есть "секреты классов Ruby", но это сильно на вырост. Начать надо с простых проектов, которые в Ruby с нуля предлагаются, я думаю

    • @jasperhumpsman7151
      @jasperhumpsman7151 Рік тому

      @@IlyaBodrovKrukowski Спасибо большое! Пост я сам удалил, потому что подумал что это "зашквар")) Посмотрю все ваши видео. Я просто столкнулся с противоречивой информацией. Очень мало качественной информации по руби в интернете, а все ютубные инфоцигане рекламируют учить корявый Js и только.

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  Рік тому

      @@jasperhumpsman7151 Почему же. Вполне нормальный вопрос. JS тут вообще не нужен, конечно. Сейчас имеет смысл искать сразу инфу по Ruby 3, тк это самая свежая версия

  • @andriyyermoshin605
    @andriyyermoshin605 2 роки тому +3

    Спасибо, Илья! Умение так доходчиво объяснять - не каждому доступний навык)

  • @halforhalf-fo4fe
    @halforhalf-fo4fe 9 місяців тому +1

    отличная подача, спасибо

  • @vinogradova82
    @vinogradova82 Рік тому +2

    не первый раз смотрю уже этот ваш видос! реально это лучшее объяснение солида, которое я видела! спасибо еще раз!)

  • @vinogradova82
    @vinogradova82 2 роки тому +8

    Илья, очень нравится ваше изложение материала! Спасибо за труд! Всегда смотрю и подписана).

  • @gekphoenix6844
    @gekphoenix6844 2 роки тому +8

    Спасибо за ваши старания!

  • @n1Sharam
    @n1Sharam 2 роки тому +5

    Как всегда, на высоте) Спасибо!)

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

      Благодарю за отзыв, буду стараться и дальше!

  • @yuriinalyvaiko2241
    @yuriinalyvaiko2241 2 роки тому +4

    В последнем примере лучше было бы передавать не класс, а готовый инстанс, полностью сконфигурированный как надо, и тогда `Logger` бы не зависел ни от каких opts. Ибо opts всё же даёт некую зависимость, и вызывающая сторона должна знать о том, как реализован `printer`.

  • @vladcid3938
    @vladcid3938 2 роки тому +1

    Большое спасибо за материал, подача очень четкая и последовательная. Лайк!

  • @Prohor21
    @Prohor21 2 роки тому +2

    Превосходно! 👏🏼👏🏼👏🏼

  • @xaogao
    @xaogao 2 роки тому +2

    Спасибо за видео, интересно посмотреть еще примеры с рефакторингом

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Надо бы что-нибудь такое организовать, конечно

  • @goludg
    @goludg 2 роки тому +3

    Спасибо огромное!

  • @dastanabeuov4394
    @dastanabeuov4394 11 місяців тому

    Принципы SOLID | На примере Ruby on Rails думаю было бы полезно знать где и как решается и как не попасть на ловушку

  • @markmakeitreal
    @markmakeitreal Рік тому +1

    Спасибо большое, очень наглядно

  • @user-ei7ip6nw6s
    @user-ei7ip6nw6s 2 роки тому +1

    Спасибо, все супер и понятно, единственно я бы в последнем принципе расширял метод не log, а initialize (как это сделано в оригинале), так как в этом случае мы можем организовать совой поток, а не отдельно для каждого вызова log передавать необходимые атрибуты. К примеру нам нужно вывести 30 логов в 2 патока для каждого места отдельно и вызов несколько раз. В этом случае нам нужно в каждый вызов метода log передать ptinter 2+n раз не айс, а так мы организовали 2 экземпляра и просто вызвали log передав в него только message.
    А по поводу строгим следованиям правил, тут я с вами на все 100% согласен! Жаль что некоторые ребята им пытаются следовать до потери пульса. Был случай, что пришлось порезать более расширяемую архитектуру в пользу SOLID, но спустя время, при сопровождении, парню занимающему более высокую позицию и зарубившему мое предложение вернуться к нему. (маленькое ликование)

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому +1

      Да, как вариант. Просто я хотел показать разные подходы и варианты решений. Но в целом, конечно, это не безусловная истина :) Спасибо!

  • @ledockol
    @ledockol 2 роки тому +1

    Опять улетел комментарий …. Переписывать не буду. Автору благодарность и лайк

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Не представляю, в чём проблема. Как говорил в прошлом видео, проблема известная и я тоже её зарепортил уже (тк это уже третий раз как минимум), но не вполне ясно, когда они это починят. Увы, понимаю, что это раздражает. support.google.com/youtube/thread/116351041/recent-reports-of-missing-comments?hl=en

  • @7urkm3n
    @7urkm3n 2 роки тому +1

    clear!

  • @grandlagging0zero175
    @grandlagging0zero175 2 роки тому +1

    Божественно. Спасибо огромное! Хоть и python'ист, но все очень просто и понятно. С помощью какой программы вы рисуете на экране?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      На здоровье! Кстати, для любителей Python у меня есть отдельное видео про SOLID, возможно, будет более актуальным :) ua-cam.com/video/C8fhcHqnqyI/v-deo.html Для записи и рисования использую Camtasia Studio - это, фактически, единственный адекватный вариант для Windows

    • @grandlagging0zero175
      @grandlagging0zero175 2 роки тому +1

      @@IlyaBodrovKrukowski Спасибо за ответ. Видео про SOLID в Python уже посмотрел :)

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      @@grandlagging0zero175 Отлично :DD Ну, по Python кое-что ещё есть на канале (программка для создания скриншотов), но пока в основном Ruby/JS. Возможно, в будущем больше про питон будет, посмотрим

    • @grandlagging0zero175
      @grandlagging0zero175 2 роки тому +1

      @@IlyaBodrovKrukowskiТакой вопрос возник. В описании не нашел кода(ссылки на репозиторий git) из принципов SOLID видео по python или ruby. У Вас он есть?

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      @@grandlagging0zero175 Да, правильное замечание! Создал два репозитария, ссылки тоже добавил. Ruby: github.com/bodrovis-learning/Ruby-SOLID-video/tree/master Python: github.com/bodrovis-learning/Python-SOLID-video/tree/master

  • @denvanrain8793
    @denvanrain8793 2 роки тому +1

    Спасибо за видео! Хотелось бы узнать, как хранить мультимедийные файлы в базе, и как их потом проигрывать. Например, музыкальные файлы. На примере какого-то простого приложения хранения и воспроизведения музыки.

    • @IlyaBodrovKrukowski
      @IlyaBodrovKrukowski  2 роки тому

      Как и любые другие, на самом деле. Просто сделать обычный загрузчик (решений для Rails полно: хотя бы Shrine тот же), сохранять эти файлы, а потом просто сделать плеер на странице. Когда-то я писал похожую статью, только там посложнее (мы делали радио), но идею понять можно, я думаю www.digitalocean.com/community/tutorials/creating-online-streaming-radio-with-rails-and-icecast

    • @denvanrain8793
      @denvanrain8793 2 роки тому +1

      @@IlyaBodrovKrukowski Спасибо за ответ! Интересная статья, попробую повторить все изложенное.