Принципы SOLID
S – Single Responsibility Principle – Принцип единственной ответственности. Каждый класс должен решать только одну задачу
O – Open-closed Principle – Принцип открытости и закрытости (наследование). Классы, модули, функции открыты для расширения, но не для модификации
L – принцип подстановки Лисков. Подклассы должны дополнять, а не замещать поведение базового класса
I – Принцип разделения интерфейсов. Нужно создавать узкоспециализированные интерфейсы. Лучше использовать несколько небольших интерфейсов, чем один большой с кучей методов.
D — Принцип инверсии зависимостей. Объектом зависимости должна быть абстракция, а не что-то конкретное