Я много слышал о том, чтобы методы были короткими, и я слышал, как многие программисты говорят, что использование тегов #region внутри метода является верным признаком того, что он слишком длинный и должен быть преобразован в несколько методов. Однако мне кажется, что во многих случаях разделение кода с тегами #region внутри метода является лучшим решением для рефакторинга на несколько методов.
Предположим, у нас есть метод, вычисления которого можно разделить на три довольно разных этапа. Кроме того, каждый из этих этапов имеет отношение только к вычислениям для этого метода, и поэтому их извлечение в новые методы не дает нам повторного использования кода. Каковы же преимущества извлечения каждой фазы в свой метод? Насколько я могу судить, все, что мы получаем, это некоторая читаемость и отдельная переменная область действия для каждой фазы (что поможет предотвратить случайное нарушение модификаций определенной фазы другой фазой).
Тем не менее, оба из них могут быть достигнуты без выделения каждой фазы в свой собственный метод. Теги регионов позволяют нам свернуть код в форму, которая так же удобочитаема (с дополнительным преимуществом, что нам больше не нужно покидать свое место в этом файле, если мы решим расширить и исследовать код), и просто заключить каждую фазу в {}
создает свою собственную область для работы.
Преимущество такого подхода состоит в том, что мы не загрязняем область действия уровня класса тремя методами, которые на самом деле имеют отношение только к внутренней работе четвертого метода. Мне кажется, что немедленный рефакторинг длинного метода в серию коротких методов является повторным использованием кода, эквивалентным преждевременной оптимизации; Вы вводите дополнительную сложность для решения проблемы, которая во многих случаях никогда не возникает. Вы всегда можете извлечь один из этапов в его собственный метод позже, если возникнет возможность повторного использования кода.
Мысли?
#region
теги, но и отключаю свертывание кода в Visual Studio. Мне не нравится код, который пытается скрыть от меня.