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

Впервые он был представлен известным ученым-компьютерщиком Робертом Дж. Мартином. Однако термин SOLID был введен позже Майклом Фезерсом.

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

Принцип SOLID означает,

  • S –принцип единой ответственности
  • O –принцип открытого/положения
  • L –принцип замены Лискво
  • I —принцип разделения интерфейса
  • D –принцип инверсии зависимостей

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

“A class should have one and only one reason to change, meaning that a class should have only one job.”

Давайте рассмотрим несколько его преимуществ:

  • Тестирование. Тестирование и написание тестовых случаев проще, поэтому требуется всего несколько тестовых случаев.
  • Низкая связанность:один класс будет иметь мало зависимостей, так как у него меньше функций.
  • Организация. Небольшие, хорошо организованные классы проще в использовании, чем сложные или неорганизованные.

02. Принцип открытых предложений

The Open-Closed Principle requires that classes should be open for extension and closed to modification.

Расширение означает добавление новой функциональности без изменения существующего кода, а модификация означает изменение кода существующего класса.

Например:

Предположим, есть класс, который может вычислить площадь квадрата, и нам также нужно вычислить площадь прямоугольника.
В этом случае нам нужно расширить этот класс, чтобы он соответствовал нашим потребностям. Но мы не должны быть в состоянии изменить это.

03. Принцип замены Лисков

“This principle implies parent classes should be easily replaced with their child classes without disrupting the behavior of the application”

Мы можем использовать следующие правила при разработке приложения.

  • Когда вы расширяете класс, он должен выполнять основные функции родительского класса.
  • У подкласса не должно быть нереализованных методов.
  • Подкласс не должен влиять на существующие методы после переопределения.

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

“Clients should not be forced to implement methods they do not use.”

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

Давайте посмотрим на некоторые преимущества этого принципа,

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

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

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

Принцип инверсии зависимостей состоит из двух частей:

  • Модули высокого уровня не должны зависеть от модулей низкого уровня. Оба должны зависеть от абстракций.
  • Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.