51 lines
3.5 KiB
Markdown
51 lines
3.5 KiB
Markdown
#рефакторинг #методы_рефакторинга
|
||
|
||
![[Pasted image 20250128084409.png]]
|
||
|
||
### **Проблема**
|
||
Вы хотите заменить существующий алгоритм другим
|
||
```javascript
|
||
function foundPerson(people) {
|
||
for(let i = 0; i < people.length; i++) {
|
||
if (people[i] === “Don”) {
|
||
return “Don”;
|
||
}
|
||
if (people[i] === “John”) {
|
||
return “John”;
|
||
}
|
||
if (people[i] === “Kent”) {
|
||
return “Kent”;
|
||
}
|
||
}
|
||
return “”;
|
||
}
|
||
```
|
||
|
||
### **Решение**
|
||
Замените тело метода, реализующего старый алгоритм, новым алгоритмом
|
||
```javascript
|
||
function foundPerson(people) {
|
||
const candidates = [”Don”, “John”, “Kent”];
|
||
return people.find(p => candidates.includes(p)) || '';
|
||
}
|
||
```
|
||
|
||
### **Причины рефакторинга**
|
||
1. Поэтапный рефакторинг — не единственный способ улучшить программу. Иногда вы сталкиваетесь с таким нагромождением проблем в методе, что его гораздо проще переписать заново. С другой стороны, вы могли найти алгоритм, который куда проще и эффективнее текущего. В этом случае надо просто заменить старый алгоритм новым.
|
||
2. С течением времени ваш алгоритм может оказаться включен в набор известной библиотеки или фреймворка, и вы можете пожелать избавиться от собственной реализации, чтобы облегчить себе поддержку программы.
|
||
3. Требования к работе программы могут измениться настолько сильно, что старый алгоритм невозможно просто «допилить» до соответствия им.
|
||
|
||
|
||
### **Порядок рефакторинга**
|
||
1. Убедитесь, что вы по максимуму упростили текущий алгоритм. Перенесите несущественный код в другие методы с помощью извлечения метода. Чем меньше «движущихся частей» останется в исходном алгоритме, тем проще будет его заменить.
|
||
2. Создайте ваш новый алгоритм в новом методе. Замените старый алгоритм новым и запустите тесты программы.
|
||
3. Если результаты не сходятся, верните старую реализацию и сравните результаты. Выясните, почему результаты не совпадают. Нередко, причиной могут быть ошибки в старом алгоритме, но с большей вероятностью не работает что-то в новом.
|
||
4. Когда все тесты начнут проходить, окончательно удалите старый алгоритм.
|
||
|
||
### **Борется с запахом**
|
||
- [[Дублируемый код]]
|
||
- [[Длинная функция]]
|
||
|
||
### **Ссылки**
|
||
- https://refactoring.guru/ru/substitute-algorithm
|
||
- [[Мартин Фаулер - Рефакторинг кода на JavaScript]] |