#рефакторинг #запахи_кода ![[Pasted image 20241112224346.png]] > Планируя изменение, мы хотим иметь возможность перейти в определенную точку программы и внести изменения именно в ней. > Расходящиеся изменения имеют место тогда, когда один модуль часто изменяется различными путями по разным причинам. Взаимодействие с базой данных и обработка финансов имеют разные контексты, так что можно облегчить свою программистскую жизнь, перемещая эти контексты в разные модули. Таким образом, когда требуется изменение в одном контексте, следует разобраться только с ним одним и игнорировать другой. Мы всегда считали это важным, но теперь, когда наш мозг с возрастом уменьшается в размерах, этот подход становится просто необходимым ### **Признаки** - При внесении изменений в класс приходится изменять большое число различных методов. Например, для добавления нового вида товара вам нужно изменить методы поиска, отображения и заказа товаров. ### **Причины появления** - Следствие плохой структурированности программы или программирования методом копирования-вставки ![[Pasted image 20241112224448.png]] ### **Рефакторинги** - [[Разделение этапа (Split Phase)]] - [[Перенос функции (Move Function)]] - [[Извлечение функции (Extract Function)]] - [[Извлечение класса (Extract Class)]] ### **Результат** - Улучшает организацию кода - Уменьшает дублирование кода - Упрощает поддержку ### **Ссылки** - [https://refactoring.guru/ru/smells/divergent-change](https://refactoring.guru/ru/smells/divergent-change) - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]