33 lines
2.3 KiB
Markdown
33 lines
2.3 KiB
Markdown
#рефакторинг #запахи_кода
|
||
|
||
![[Pasted image 20241113230434.png]]
|
||
|
||
> Одним из больших преимуществ использования классов является возможность подстановки, позволяющая в случае необходимости подставлять один класс вместо другого. Но это работает, только если их интерфейсы одинаковы
|
||
|
||
|
||
### **Признак**
|
||
- Два класса выполняют одинаковые функции, но имеют разные названия методов
|
||
|
||
### **Причины появления**
|
||
- Программист, который создал один из классов, скорей всего, не знал о том, что в программе уже существует аналогичный по функциям класс
|
||
|
||
### **Рефакторинги**
|
||
- [[Изменение объявления функции (Change Function Declaration)]]
|
||
- [[Перенос функции (Move Function)]]
|
||
- [[Извлечение суперкласса (Extract Superclass)]]
|
||
|
||
![[Pasted image 20241113230521.png]]
|
||
|
||
### **Результат**
|
||
- Вы избавляетесь от ненужного дублирования кода, и, таким образом, уменьшаете его размер
|
||
- Повышается читабельность кода, улучшается его понимание. Вам больше не придется гадать, зачем создавался второй класс, выполняющий точно такие же функции, как и первый
|
||
|
||
### **Не стоит трогать, если...**
|
||
-Иногда объединить классы оказывается невозможно либо настолько сложно, что смысла заниматься этой работой нет. Один из примеров — альтернативные классы находятся в двух разных библиотеках, каждая из которых имеет свою версию класса
|
||
|
||
### **Ссылки**
|
||
- https://refactoring.guru/ru/smells/alternative-classes-with-different-interfaces
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]]
|
||
|
||
|