5 принципов, которые были обобщены Робертом Мартином.
Главная цель SOLID принципов - уменьшить каскад изменения в системе.
Хороший доклад на тему:
https://www.youtube.com/watch?v=pu0EXQvoaCc
Code Smells:
Rigidity(закостенелось) - систему тяжело изменять, каждое изменение влечет цепочку других изменений.
**Fragility(хрупкость) - "**ухо почесал, жопа отвалилась".
Immobility(неподвижность) - части системы не могут быть переиспользованы в других системах.
Viscosity(вязкость) - дешевле применить хак, чем сделать хорошо.
Needless complexity(избыточная сложность) - наличие чего-то, что создает сложность сейчас, но понадобится "когда-то потом".
Needless repetition(излишнее повторение) - имеют место структуры, которые могут быть объеденены в одну абстракцию.
Opacity(прозрачность) - код тяжело читать и понимать.
Single Responsibility Principle