Suponha que eu tenha um método longo como este:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
Este método não possui partes repetitivas que devem ser movidas para método ou função local separada.
Há muitas pessoas (incluindo eu) que pensam que métodos longos são odores de código. Também não gosto da ideia de usar #region
aqui e há uma resposta muito popular explicando por que isso é ruim .
Mas se eu separar esse código em métodos
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
Vejo os seguintes problemas:
Poluindo âmbito definição de classe com as definições que são usados internamente por um único método e o que significa que deve documentar em algum lugar que
Task1
eTask2
são destinados apenas para internos doSomeLongMethod
(ou cada pessoa que lê meu código terá que deduzir essa idéia).O IDE poluente preenche automaticamente (por exemplo, Intellisense) de métodos que seriam usados apenas uma vez dentro do
SomeLongMethod
método único .
Então, se eu separar esse código de método em funções locais
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
então isso não tem as desvantagens de métodos separados, mas isso não parece melhor (pelo menos para mim) do que o método original.
Qual versão do SomeLongMethod
é mais sustentável e legível para você e por quê?