SOLID простыми словами
S - один объект решает только одну задачу, а не несколько.
O - классы открыты для расширения но закрыты для модификации, весь новый функционал это наследование от текущего класса (в рамках разумного).
L - класс работающий с определенным классом должен работать и с его наследниками, наследуемый класс должен дополнять а не замещать функции родителя.
I - разделение интерфейсов с жирных на более мелкие. заставляем клиента реализовывать только тот интерфейс которым он пользуется.
D - классы зависят от абстракций а не от конкретных реализаций.