C#:
Рефакторинг
Як:
Давайте виконаємо рефакторинг простого методу C#, який обчислює і виводить суму масиву чисел:
До рефакторингу:
public class Calculator
{
public void CalculateSum()
{
int[] numbers = { 1, 2, 3, 4, 5 };
int sum = 0;
for (int i = 0; i < numbers.Length; i++)
{
sum += numbers[i];
}
Console.WriteLine("Сума становить " + sum);
}
}
Після рефакторингу:
public class Calculator
{
private readonly int[] _numbers;
public Calculator(int[] numbers)
{
_numbers = numbers;
}
public int CalculateSum()
{
return _numbers.Sum();
}
public void DisplaySum()
{
Console.WriteLine($"Сума становить {CalculateSum()}");
}
}
// Використання:
var calculator = new Calculator(new[] { 1, 2, 3, 4, 5 });
calculator.DisplaySum();
Завдяки рефакторингу ми розділили відповідальності, зробили клас Calculator
гнучкішим, дозволивши йому приймати будь-який масив чисел, та використали LINQ для того, щоб обчислення суми стало більш лаконічним.
Поглиблений огляд
Рефакторинг має своє коріння в спільноті програмістів Smalltalk і став популярним у 1990-х роках завдяки книзі Мартіна Фаулера “Рефакторинг: покращення дизайну існуючого коду”. З тих пір це стало фундаментальною частиною агільних методологій та хороших практик написання коду.
Існують різні підходи до рефакторингу, такі як Червоний-Зелений-Рефактор у Розробці через Тестування (TDD). Це гарантує, що рефакторинг не вводить помилки, починаючи з невдалих тестів, роблячи їх успішними, а потім очищаючи код.
При проведенні рефакторингу важливо мати повний набір тестів, щоб переконатися, що функціональність не порушується під час процесу. Автоматизовані інструменти рефакторингу, як-от ReSharper для C#, також можуть допомогти в цьому процесі, надаючи безпечні способи зміни структур коду. Однак, інструменти повинні бути доповненням до глибокого розуміння кодової бази та принципів кодування.
Див. також
- Фундаментальна праця Мартіна Фаулера про Рефакторинг: Рефакторинг: покращення дизайну існуючого коду
- Посібник Microsoft з Рефакторингу в Visual Studio: Рефакторинг (C#)
- Детальний огляд патернів рефакторингу з прикладами: Рефакторинг на SourceMaking