Załóżmy, że mam taką długą metodę:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
Ta metoda nie ma powtarzalnych części, które należy przenieść do oddzielnej metody lub funkcji lokalnej.
Wiele osób (w tym ja) uważa, że długie metody to zapachy kodowe. Nie podoba mi się również pomysł użycia tutaj #region
(ów) i istnieje bardzo popularna odpowiedź wyjaśniająca, dlaczego jest to złe .
Ale jeśli podzielę ten kod na metody
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
Widzę następujące problemy:
Zakres definicji klasy zanieczyszczeń z definicjami, które są używane wewnętrznie przez jedną metodę, co oznacza, że powinienem gdzieś to udokumentować
Task1
iTask2
są one przeznaczone tylko dla elementów wewnętrznychSomeLongMethod
(lub każda osoba, która czyta mój kod, będzie musiała wywnioskować ten pomysł).Zanieczyszczające autouzupełnianie IDE (np. Intellisense) metod, które byłyby używane tylko raz w obrębie jednej
SomeLongMethod
metody.
Więc jeśli podzielę ten kod metody na funkcje lokalne
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
to nie ma wad oddzielnych metod, ale nie wygląda to lepiej (przynajmniej dla mnie) niż metoda oryginalna.
Która wersja SomeLongMethod
jest dla Ciebie łatwiejsza w utrzymaniu i czytelna i dlaczego?