НОВОСТИ Справочная: разбираемся с принципами SOLID

NewsBot
Оффлайн

NewsBot

.
.
Регистрация
21.07.20
Сообщения
40.408
Реакции
1
Репутация
0
Расскажем, кто их придумал и в чем они заключаются. Также поговорим о критике этого подхода — о том, почему некоторые разработчики отказываются следовать SOLID-методологиям.


[SUP]Фото — — Unsplash[/SUP]

Акроним


SOLID — обозначает пять первых принципов объектно-ориентированного программирования:

  • Единственной ответственности ( ). Один модуль/класс — одна задача. Кажется, что-то такое мы уже обсуждали, когда разбирали « » вместе с принципами KISS.
  • Открытости/закрытости ( ). Компоненты — расширяемые и немодифицируемые. Его основоположником считают Бертрана Мейера ( ) — автора .
  • Подстановки ( ). Разработчик должен иметь возможность заменить тип на подтип, не сломав систему. Иерархию типов нужно тщательно моделировать, чтобы избежать путаницы. Принцип предложила Барбара Лисков ( ) — один из авторов .
  • Разделения интерфейса ( ). Специализация, чтобы развязать их и программные сущности, плюс — упростить рефакторинг в случае внесения изменений в логику работы. Этот принцип определил Роберт Мартин ( ) — международно признанный эксперт в области разработки ПО.
  • Инверсии зависимостей ( ). Управляющие компоненты должны быть абстрагированы от модулей нижних уровней, а детали — не зависеть от абстракций и модулей верхних уровней. предложил и этот пункт ( ).

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

Кто вывел SOLID


Как вы уже успели догадаться, за основную часть принципов отвечал именно . Комплексно он описал их в работе « » 2000 года, а сам акроним SOLID уже позже предложил инженер Майкл Фэзерс (Michael Feathers). Если интересно, у Майкла есть , где он дает рекомендации о том, как «оживить» legacy-систему и не сойти с ума по ходу дела.

86jv5htja_8jc7-fdcqmkogkkkq.jpeg

Фото — — Unsplash

Задача SOLID — способствовать разработке приложений, которые легко поддерживать и расширять в течение долгого времени. Но этот свод рекомендаций часто подвергают критике.

За что критикуют


Иногда эти принципы «слишком расплывчатыми», что усложняет их практическое использование. Программист и писатель Джоэл Спольски (Joel Spolsky) в The StackOverflow Podcast также отметил, что SOLID-методология слишком утопична и вынуждает разработчиков тратить время на избыточный код фактически «ради галочки».

Он считает, что не нужно заранее пытаться учесть все возможные варианты развития событий и просто программировать, постепенно исправляя недочеты, а не опираться на мнимую «систему безопасности». Спольски не отменяет значимости принципов, но называет их чрезмерными.

Есть , что SOLID-код имеет слабую связность и его легко тестировать, но очень сложно понимать (в критике используется слово «unintelligible»). Программисту приходится писать множество детализированных интерфейсов и небольших классов, которые больше отвлекают и путают, чем помогают наладить какую-то систему. С этим утверждением многие, кто считает, что достаточно фокусироваться на простоте кода, чтобы его могли поддерживать другие разработчики.

gxtitezggwdgrar-ndat3pzlyui.jpeg

Фото — — Unsplash

В тематическом треде на Hacker News и о том, что гораздо большее значение имеет выбор архитектуры, технологического стека и управление зависимостями проекта, а не основополагающие принципы, по которым строится его написание. Здесь вновь указывают на излишнюю сложность старта с комплексного проектирования системы, указывая уже на принцип YAGNI или « ». В какой-то степени это — очередной ремикс классического .

Стоит признать, что есть и множество высказываний в защиту SOLID. Так, один из резидентов HN говорит, что следование эти принципам поможет быстро заменить условную библиотеку, если на уровне абстракции что-то пойдет не совсем так. Достаточно будет удостовериться в выполнении тестов для новой реализации и на этом все, максимум — дополнительно проверить зависимости для старой версии класса и по мере необходимости использовать доработанный, чтобы тесты прошли успешно. Тогда в коде не будет и «излишней сложности», а тем, кто будет заниматься им впоследствии, не будет грозить так называемый .

Важно помнить, что принципы SOLID являются лишь рекомендациями, а не строгими правилами. И всегда будут кейсы, когда их лучше придерживаться, а когда — отступить.


[SUP]О чем мы пишем в корпоративном блоге 1cloud.ru:

actz7ltk4slyfsj1icsuxxc2c-m.png

actz7ltk4slyfsj1icsuxxc2c-m.png

actz7ltk4slyfsj1icsuxxc2c-m.png

[/SUP]
 
Сверху Снизу