Предположим, у меня есть длинный метод, подобный этому:
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
более удобна для чтения и почему?