SOLID (сокр. от англ. single responsibility, open-closed, Liskov substitution, interface segregation и dependency inversion) в программировании — мнемонический акроним, введённый Майклом Фэзерсом (Michael Feathers) для первых пяти принципов, названных Робертом Мартином  в начале 2000-х , которые означали пять основных принципов объектно-ориентированного программирования и проектирования.

 

 

 

Принципы

Избавиться от “признаков плохого проекта”[4] помогают следующие пять принципов SOLID:

Инициал Представляет[1] Название[4], понятие
S SRP[5]
Принцип единственной ответственности (The Single Responsibility Principle)
Существует лишь одна причина, приводящая к изменению класса.
O OCP[6]
Принцип открытости/закрытости (The Open Closed Principle)
«программные сущности … должны быть открыты для расширения, но закрыты для модификации.»
L LSP[7]
Принцип подстановки Барбары Лисков (The Liskov Substitution Principle)
«объекты в программе должны быть заменяемыми на экземпляры их подтипов без изменения правильности выполнения программы.» См. также контрактное программирование.
I ISP[8]
Принцип разделения интерфейса (The Interface Segregation Principle)
«много интерфейсов, специально предназначенных для клиентов, лучше, чем один интерфейс общего назначения.»[9]
D DIP[10]
Принцип инверсии зависимостей (The Dependency Inversion Principle)
«Зависимость на Абстракциях. Нет зависимости на что-то конкретное.»[9]

 

Признаки плохого проекта

  1. Закрепощённость: система с трудом поддается изменениям, поскольку любое минимальное изменение вызывает эффект “снежного кома”, затрагивающего другие компоненты системы.
  2. Неустойчивость: в результате осуществляемых изменений система разрушается в тех местах, которые не имеют прямого отношения к непосредственно изменяемому компоненту.
  3. Неподвижность: достаточно трудно разделить систему на компоненты, которые могли бы повторно использоваться в других системах.
  4. Вязкость: сделать что-то правильно намного сложнее, чем выполнить какие-либо некорректные действия.
  5. Неоправданная сложность: проект включает инфраструктуру, применение которой не влечёт непосредственной выгоды.
  6. Неопределенность: проект трудно читать и понимать. Недостаточно четко выражено содержимое проекта.