Base/Knowledges/IT/Рефакторинг/Запахи кода/Альтернативные классы с разными интерфейсами.md
2026-02-23 19:52:05 +03:00

33 lines
2.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #запахи_кода
![[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]]