C#:
Refatoração
Como fazer:
Vamos refatorar um simples método C# que calcula e imprime a soma de um array de números:
Antes da Refatoração:
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("The sum is " + sum);
}
}
Após a Refatoração:
public class Calculator
{
private readonly int[] _numbers;
public Calculator(int[] numbers)
{
_numbers = numbers;
}
public int CalculateSum()
{
return _numbers.Sum();
}
public void DisplaySum()
{
Console.WriteLine($"The sum is {CalculateSum()}");
}
}
// Uso:
var calculator = new Calculator(new[] { 1, 2, 3, 4, 5 });
calculator.DisplaySum();
Ao refatorarmos, separamos as preocupações, tornamos a classe Calculator
mais flexível ao permitir que ela receba qualquer array de números, e aproveitamos o LINQ para tornar o cálculo da soma mais conciso.
Aprofundamento
A refatoração tem suas raízes na comunidade de programação Smalltalk e foi popularizada na década de 1990 pelo livro de Martin Fowler “Refatoração: Melhorando o Design do Código Existente”. Ao longo dos anos, tornou-se uma parte fundamental das metodologias ágeis e das boas práticas de codificação.
Há várias abordagens para a refatoração, como o Red-Green-Refactor no Desenvolvimento Guiado por Testes (TDD, na sigla em inglês). Isso garante que a refatoração não introduza bugs, começando com um teste falho, fazendo-o passar e então limpando o código.
Ao implementar a refatoração, é crucial ter uma suíte de testes abrangente para garantir que nenhuma funcionalidade seja quebrada durante o processo. Ferramentas de refatoração automatizadas, como o ReSharper para C#, também podem auxiliar neste processo ao fornecer maneiras seguras de alterar estruturas de código. No entanto, as ferramentas devem ser complementares a um profundo entendimento da base de código e dos princípios de codificação.
Veja também
- A obra seminal de Martin Fowler sobre Refatoração: Refatoração: Melhorando o Design do Código Existente
- Guia da Microsoft sobre Refatoração no Visual Studio: Refatoração (C#)
- Um olhar detalhado sobre padrões de Refatoração com exemplos: SourceMaking Refatoração