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 Рефакторинг