SOLID и Ruby в 5 коротких примерах

В этой статье мы рассмотрим следующие темы:

  • Принцип единой ответственности
  • Принцип открытия / закрытия
  • Принцип подстановки Лискова
  • Принцип разделения интерфейса
  • Принцип инверсии зависимостей

Прежде, чем начать

Позвольте мне представить здесь платформу, которая помогла мне изучить большую часть моих знаний о Ruby. Действительно, Pluralsight - потрясающая платформа.

С 50+ курсами, которые охватывают различные темы по Ruby и Ruby on Rails, это лучший способ поднять свои знания на новый уровень!

Попробуйте бесплатно 👇😉



Спасибо за уделенное время!

Вступление

SOLID - это аббревиатура, обозначающая набор принципов, помогающих разработчикам создавать долгосрочный поддерживаемый исходный код, использующий объектно-ориентированный язык программирования.

ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: поскольку это всего лишь набор принципов, очевидно, что он не заменит ваш здравый смысл.

При этом давайте подробно рассмотрим каждый принцип на простом и коротком примере.

PS: Из-за дизайна утиной печати принцип разделения интерфейса и инверсии зависимостей не актуален в Ruby.

В противном случае я предлагаю интересные ресурсы в обоих разделах об этих принципах для самых любопытных разработчиков.

Принцип единой ответственности

Этот принцип основан на том факте, что класс должен отвечать только за один аспект программы. Под ответственным мы подразумеваем, что на класс может повлиять изменение только одного аспекта программы.

Если в процессе ведения журнала происходит изменение - например, запись в файл вместо простого puts, - это должно повлиять только на класс Logger, поскольку это единственный класс, который отвечает за ведение журнала.

Принцип открытия / закрытия

Этот принцип основан на том, что класс должен быть открыт для расширения и закрыт для модификации.

Это означает, что предпочтительнее создавать производные от класса, который вы хотите использовать, чем изменять его напрямую.

Здесь класс Array остается неизменным, когда класс Collection - как специализация Array - по-прежнему получает свойства массива.

Таким образом, этот шаблон позволяет вам добавлять набор функций и изменять существующие методы Array, не затрагивая все другие экземпляры Array.

Лисков Принцип подстановки

Этот принцип основан на том, что производный класс должен быть заменен своим базовым классом.

В этом примере метод RoleLogger#print_role принимает аргумент role.

В нашем случае классы Admin и User являются производными от Role.

Мы можем легко поменять местами эти классы, не нарушая ожидаемого поведения метода RoleLogger#print_role.

Принцип разделения интерфейса

Принцип разделения интерфейсов (1996)

Принцип инверсии зависимостей

Принцип инверсии зависимости (1996)

Вуаля!

Спасибо, что нашли время прочитать этот пост :-)

Не стесняйтесь 👏 и поделитесь этой статьей, если она была для вас полезна. 🚀

Вот ссылка на мою последнюю статью: Modules in Ruby: Part I