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