Недавно снова услышал такой вайб: все эти принципы - это только направление, и их можно не придерживаться. Когда их придумали, вообще был другой IT, и сейчас это все не актуально.
И таких людей не переубедишь. Приводи им примеры или нет - свой опыт им не передашь. Да и слушать у нас как-то стало не модно. У нас же все теперь гибко и "как договоритесь". И требовать каких-то стандартов отрасли - это уже абьюз… Например:
Без тестов - норм
Код стайл - давайте кто как хочет
Фреймворки и библиотеки - кому как нравится
Давайте сразу оптимизируем. Пишем RawSQL и т.д.
А как по мне - это анархия, а не гибкость и отсутствие бюрократии. Можете называть меня старпером. И да, мне нравится когда в машине есть механические кнопки, а не эти эти ваши планшеты в которых в движении фиг что ткнешь (кто-то может возразить - ведь у тебя же не nokia 3310 как телефон, но и требования к мобильным устройствам сильно изменились, при этом машина по прежнему машина, а не звездолет с автономным управлением и кинотеатром внутри).
В последнее время запрещёнограме я стал видеть, как люди начали делать своими руками ремонты в домах и квартирах. То ли это стало модно - ремонт DIY. То ли ремонт стал настолько дорогим, что даже прилично зарабатывающие люди подумали - а не сделать ли ремонт своими руками и с любовью? То ли и то, и другое.
Поэтому я решил попробовать доказать вам, что принципы разработки (почти как законы физики) меняются невероятно редко, именно на инструменте, с которым большинство людей имеет или будет иметь дело. Давайте рассмотрим принципы SOLID на основе перфораторной дрели.

SOLID — это аббревиатура, обозначающая пять ключевых принципов объектно-ориентированного программирования (ООП), разработанных Робертом Мартином, для создания понятного, гибкого и поддерживаемого кода (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion)
S - Single Responsibility Principle (Принцип единственной ответственности). Класс должен иметь только одну причину для изменения.
Для дрели: кнопка под указательным пальцем должна управлять только оборотами. Нельзя на неё вешать переключение на перфорацию. Сломаешь перфорацию - сломаешь дрель полностью.
O - Open/Closed Principle (Принцип открытости/закрытости). Сущности должны быть открыты для расширения, но закрыты для модификации.
Для дрели: хотите сверлить или штробить - вставляйте сверло. Хотите полировать - меняйте патрон и вставляйте его с правильной насадкой. Дорабатывать текущий патрон под новую насадку чревато тем, что перестанет работать то, что работало раньше. Например, патрон потерял центровку, и началась вибрация, или он перестал держать тонкие сверла...
L - Liskov Substitution Principle (Принцип подстановки Барбары Лисков). Классы-наследники не должны противоречить базовому классу.
Для дрели: перфораторная дрель должна иметь те же базовые функции, что имеет обычная дрель. Например, вы ожидаете, что в перфораторной дрели так же есть режим реверс. И в ней также можно менять сверла.
I - Interface Segregation Principle (Принцип разделения интерфейсов): Клиенты не должны зависеть от интерфейсов, которые они не используют.
Для дрели: существуют навороченные дрели. С пылесборником, с уровнем, c дополнительной ручкой, с подсветкой, разными режимами и многим другим. Если тебе нужен базовый инструмент для того, чтобы повесить полочку раз в пол года в гипсокартон - ручка и пылесборник будет тебе мешать. Или сломанный режим перфоратора может помешать воспользоваться дрелью в принципе (в виду сложности конструкции).
D - Dependency Inversion Principle (Принцип инверсии зависимостей). Модули верхних уровней не должны зависеть от модулей нижних уровней.
Для дрели: двигатель дрели не знает ничего о том, откуда он получает питание. Это для нее абстракция. Если это дрель от сети - то достаточно заменить стабилизатор, чтобы эта же дрель работала от другого напряжения. Если это аккумуляторная дрель от постоянного тока - то производитель может обновить линейку аккумуляторов, оставив интерфейс - и все будет работать как прежде.
А теперь вопрос - сколько ещё будут держаться эти принципы? Через сколько лет вы захотите чтобы производители дрелей перестали этого придерживаться? Например, чтобы управление дрелью стало сенсорным и в нём появилась плата, управляющая всем сразу? Я лично очень некомфортно буду себя ощущать в мире, где останутся только вот такие дрели...
Целью статьи было показать не универсальность этих принципов для разных сфер жизни (при разработки электроники скорее всего есть свои принципы), а их применимость спустя годы. Кстати, у меня есть ещё одна статья уже про реальный SOLID, но уже в проектировании архитектуры. Велкам к прочтению https://habr.com/ru/companies/qiwi/articles/697946/
P.S. Есть еще много принципов типа YAGNI / DRY / KISS, подходов к разработке типа чистого кода / TDD / BDD / DDD / экстремального программирования / гибкой разработки и тому подобного. На мой взгляд, появилось слишком много разработчиков, которые разрабатывают «чтобы работало» и отвечают на все эти принципы — «это все как договоритесь», потому что не погружались глубоко в предмет, а где‑то что‑то читали. Коллеги, будьте профессионалами. Читайте, изучайте, пробуйте
