Припустимо, у мене давно такий метод:
public void SomeLongMethod()
{
// Some task #1
...
// Some task #2
...
}
У цього методу немає повторюваних частин, які слід перемістити в окремий метод або локальну функцію.
Є багато людей (включаючи мене), які думають, що довгі методи - це кодовий запах. Також мені не подобається ідея використання #region
(-ів) тут, і є дуже популярна відповідь, яка пояснює, чому це погано .
Але якщо я розділяю цей код на методи
public void SomeLongMethod()
{
Task1();
Task2();
}
private void Task1()
{
// Some task #1
...
}
private void Task2()
{
// Some task #1
...
}
Я бачу такі проблеми:
Опилення області визначення класу з визначеннями, які використовуються внутрішньо за допомогою одного методу, і це означає, що я повинен десь документувати це
Task1
іTask2
призначений лише для внутрішніх службSomeLongMethod
(або для кожної людини, яка читає мій код, доведеться зробити цю думку).Запитання IDE автозаповнення (наприклад, Intellisense) методів, які будуть використовуватися лише один раз всередині одного
SomeLongMethod
методу.
Тож якщо я розділю код цього методу на локальні функції
public void SomeLongMethod()
{
Task1();
Task2();
void Task1()
{
// Some task #1
...
}
void Task2()
{
// Some task #1
...
}
}
то у цього немає недоліків окремих методів, але це не виглядає краще (принаймні для мене), ніж оригінальний метод.
Яка версія програми SomeLongMethod
є більш доступною та читаною для вас і чому?