5 принципов, которые были обобщены Робертом Мартином.

Главная цель SOLID принципов - уменьшить каскад изменения в системе.

Хороший доклад на тему:

https://www.youtube.com/watch?v=pu0EXQvoaCc

Code Smells:

Rigidity(закостенелось) - систему тяжело изменять, каждое изменение влечет цепочку других изменений.

**Fragility(хрупкость) - "**ухо почесал, жопа отвалилась".

Immobility(неподвижность) - части системы не могут быть переиспользованы в других системах.

Viscosity(вязкость) - дешевле применить хак, чем сделать хорошо.

Needless complexity(избыточная сложность) - наличие чего-то, что создает сложность сейчас, но понадобится "когда-то потом".

Needless repetition(излишнее повторение) - имеют место структуры, которые могут быть объеденены в одну абстракцию.

Opacity(прозрачность) - код тяжело читать и понимать.

Single Responsibility Principle

Open-Closed Principle

Liskov Substitution Principle

Interface Segregation Principle

Dependency Inversion Principle