Single Responsibility, каждый объект должен иметь одну ответственность и эта ответственность должна быть полностью инкапсулирована в класс.
Open/close principle, программные сущности (классы, модули, функции и т. п.) должны быть открыт для расширения, но закрыты для изменения.
Liskov принципы:
- Входные данные класса родителя и класса предка должны быть одинаковые (в java ограничено компилятором)
- Выходные данные класса родителя и предка должны быть одинаковыми (в java ограничено компилятором)
- Должны быть одинаковые exception в классе предке и классе родителе.
- Предусловие - если Родитель не может принимать отрицательные числа, то и наследники не могут принимать отрицательные числа. Логика должна быть одинакова. Если родитель принимает все, то и наследник принимает все.
- Постусловие - если в методе родителе закрывается соединение с бд, то оно должно закрываться и во всех наследниках.
- Инвариативность – набор условий, при котором объект имеет смысл. Например инвариант кота, наличие лап, хвоста, способность мурчать. При наследовании должен создаваться класс потомок схожий с родителем, например кот -> сиамский кот. Это не должна быть собака.
Interface segregation - разбиение больших интерфейсов на маленькие, в классе имплементирующем не должно быть не используемых методов интерфейса.
Dependency Inversion - зависимости внутри системы строятся на основе абстракций. Модули верхнего уровня не зависят от модулей нижнего уровня.
Абстракции не должны зависеть от деталей. Детали должны зависеть от абстракций.
Хорошее объяснение:
https://www.youtube.com/watch?v=47-F0wGz-Vk
GitLab с примерами solid:
Выплаты, пособия от государства, экономические новости читать здесь: https://t.me/+fbTtq1Tpb_45NGUy