Вот как расшифровывается акроним SOLID:
- S: Single Responsibility Principle (Принцип единственной ответственности).
- O: Open-Closed Principle (Принцип открытости-закрытости).
- L: Liskov Substitution Principle (Принцип подстановки Барбары Лисков).
- I: Interface Segregation Principle (Принцип разделения интерфейса).
- D: Dependency Inversion Principle (Принцип инверсии зависимостей).
Принцип единственной ответственности — Каждый класс должен решать лишь одну задачу.
Принцип открытости-закрытости — Программные сущности (классы, модули, функции) должны быть открыты для расширения(чтения), но не для модификации(записи).
Принцип подстановки Барбары Лисков — Необходимо, чтобы подклассы могли бы служить заменой для своих суперклассов. Цель этого принципа заключаются в том, чтобы классы-наследники могли бы использоваться вместо родительских классов, от которых они образованы, не нарушая работу программы. Если оказывается, что в коде проверяется тип класса, значит принцип подстановки нарушается.
Принцип разделения интерфейса — Создавайте узкоспециализированные интерфейсы, предназначенные для конкретного клиента. Клиенты не должны зависеть от интерфейсов, которые они не используют.
Принцип инверсии зависимостей (dependency inversion principle / DIP)
Модули верхних уровней не должны зависеть от модулей нижних уровней. Оба типа модулей должны зависеть от абстракций.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Хотел бы отметить по О-принципу, что написанное может быть истолковано как «делай public get и private set». Но суть совсем не в этом, а в том, чтобы при расширении кодовой базы не изменялись существующие классы (можно только исправлять ошибки), а создавались новые классы, унаследованные от существующих и, вероятно, корректирующие их поведение. Особенно важно, что не требовалось менялся код, использующий изначально существующие классы (или их абстракции).