29 lines
2.5 KiB
Markdown
29 lines
2.5 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[Pasted image 20241112225742.png]]
|
||
|
||
> Инструкция switch — вовсе не красный флаг.
|
||
> Когда одна и та же условная логика (либо в switch/case, либо в каскаде if/else) появляется в разных местах, проблема состоит в том, что всякий раз, когда вы добавляете ветвь, вы должны найти все инструкции switch и обновить их. Полиморфизм обеспечивает элегантное оружие против темных сил такого повторения.
|
||
|
||
### **Признаки**
|
||
- У вас есть сложный оператор `switch` или последовательность `if`-ов
|
||
|
||
### **Причины появления**
|
||
Одним из очевидных признаков объектно-ориентированного кода служит сравнительно редкое использование операторов типа switch или case. Часто один и тот же блок switch оказывается разбросанным по разным местам программы. При добавлении в него нового варианта приходится искать все эти блоки switch и модифицировать их.
|
||
Как правило, заметив блок switch, следует подумать о полиморфизме.
|
||
|
||
### **Рефакторинги**
|
||
- [[Замена условной инструкции полиморфизмом (Replace Conditional with Polymorphism)]]
|
||
|
||
![[Pasted image 20241112225751.png]]
|
||
|
||
### **Результат**
|
||
- Улучшает организацию кода
|
||
|
||
### **Не стоит трогать, если...**
|
||
- Когда оператор `switch` выполняет простые действия, нет никакого смысла что-то менять в коде
|
||
- Зачастую оператор switch используется в фабричных паттернах проектирования (**Фабричный метод**, **Абстрактная фабрика**) для выбора создаваемого класса.
|
||
|
||
### **Ссылки**
|
||
- [https://refactoring.guru/ru/smells/switch-statements](https://refactoring.guru/ru/smells/switch-statements)
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |