Может ли когнитивная нагрузка быть неявной метрикой того, нуждается ли участок кода в рефакторинге?
Когда вы пытаетесь достичь SOLID-архитектуры, многие функции начинают выглядеть как один-три лайнера. Иногда мы можем задаться вопросом, зачем лишний шаблон, если это всего три строки? Однако из-за принципа единой ответственности может случиться так, что, когда мы видим более крупные методы, чтение, необходимое для понимания того, что делает этот метод, на самом деле может быть признаком того, что метод делает слишком много и отчаянно нуждается в рефакторинге.
Хорошее эмпирическое правило — спросить себя, что на самом деле делает MethodX? Если мы начнем читать и обнаружим, что пишем такую историю:
Рассмотрим гипотетический метод. В нем делаем следующее:
- Мы инициализируем несколько объектов/значений
- Позвоните, чтобы получить дополнительные данные или сохранить данные
- Затем вызовите метод, чтобы выполнить какую-либо операцию над этим кодом,
- Затем мы выполняем проверку, чтобы убедиться, что данные готовы к возврату.
- И если данные не «готовы», то выполнить дополнительные операции для завершения этой работы.
- И затем еще одна проверка, необходимая после этого.
- Все, прежде чем, наконец, вернуть сбор данных, надеюсь, теперь в правильном формате для использования.
Вы видели количество Анд в этом? Каждое из этих «и», вероятно, является признаком того, что ваш метод пытается сделать слишком много:
- Извлечение и хранение данных, вероятно, является одной задачей.
- Другим методом может быть выполнение операции над набором данных.
- Подтверждение того, что мы завершили работу над этой коллекцией, может быть другим.
- Выполнение дополнительных операций над этой коллекцией — это еще одно.
Вот почему мы часто говорим о методах и упоминаем, что их длина не заходит слишком далеко вниз по экрану, что является хорошим практическим правилом. Дело не только в длине кода, но и в повествовательной структуре и истории этого метода по мере того, как он течет по экрану, что может выявить потребности в сложности, разделенные рефакторингом. Кроме того, благодаря этому значительно уменьшится когнитивная нагрузка при модульном тестировании каждого метода, что значительно упростит его выполнение.
Поэтому в следующий раз, когда вы, возможно, почувствуете легкую усталость ума при чтении длинного метода, вспомните об этой эвристике последовательного предложения в качестве индикатора. Так что, если вам кажется, что вы используете слово «И» в рассказе об этом методе, попробуйте реорганизовать его, чтобы поместить каждую его часть в отдельный контекст, который легче понять.
#рефакторинг #CognitiveLoad #CleanCode #reducethestrain