Supponiamo di avere un metodo lungo come questo:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
Questo metodo non ha parti ripetitive che dovrebbero essere spostate su un metodo separato o su una funzione locale.
Ci sono molte persone (incluso me) che pensano che i metodi lunghi siano odori di codice.
Inoltre non mi piace l'idea di usare #region (s) qui e c'è una risposta molto popolare che spiega perché questo è male .
Ma se separio questo codice in metodi
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
Vedo i seguenti problemi:
-
Ambito di definizione della classe di inquinamento con definizioni utilizzate internamente da un singolo metodo e che significa che dovrei documentare da qualche parte che
Task1eTask2sono intese solo per interni diSomeLongMethod(o ogni persona che legge il mio codice dovrà inferire questa idea). -
Compilazione automatica IDE di polling (ad es. Intellisense) di metodi che verrebbero utilizzati una sola volta all'interno del singolo metodo
SomeLongMethod.
Quindi, se separio questo codice metodo in funzioni locali
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
quindi questo non ha gli svantaggi dei metodi separati ma questo non ha un aspetto migliore (almeno per me) rispetto al metodo originale.
Quale versione di SomeLongMethod è più gestibile e leggibile per te e perché?