Рефакторинг — чистый код

Архитектура внешний интерфейс модульный тест дизайн
Рефакторинг — чистый код

Об авторе Xin Ming Ant Техническая группа по работе с финансовыми данными

предисловие

Я также представил передний проект нашей команды от ноль начала 8-месячный итерационный бизнес-код 100 000 (20% для долгосрочных требований к планированию для продукта), все еще перекрывая процесс.

В дополнение к разработке хорошо продуманной архитектуры для управления этим чрезвычайно сложным интерфейсным приложением члены команды также начали пополнять свои знания шаблонов проектирования и рефакторинга, чтобы оптимизировать код проекта в процессе непрерывной итерации и поддерживать код. Свежесть, надежность, ремонтопригодность... так что новые члены команды, которые присоединяются позже, могут быстро присоединиться к нашей разработке продукта

PS: Независимо от языка,рефакторингявляются неотъемлемой частью процесса разработки программного обеспечения. Если вы уже понимаете основы рефакторинга, вы можете сразу перейти к концу статьи.重构案例часть.

Реконструировать фон

«Если подгузник пахнет, смени его».

  • Код со временем становится все хуже и хуже по мере добавления бизнес-требований.
  • Сюда могут входить следующие неприятные запахи (только название):
    • повторяющийся код
    • слишком длинная функция
      • Следуйте принципу: всякий раз, когда вы чувствуете, что вам нужен комментарий, чтобы что-то объяснить, вы можете попробовать записать то, что нужно объяснить, в функцию.
    • Избыточность
      • Когда подклассы не выполняют достаточно работы или когда в видимых ожиданиях нет новой ситуации, рассмотрите возможность встраивания класса.
    • слишком длинный класс
      • Эта ситуация склонна к избыточному коду. Например, если в классе есть несколько переменных с одинаковым префиксом или суффиксом, это означает, что вы можете рассмотреть возможность их извлечения в компонент, или рассмотреть, может ли этот компонент быть подклассом, и использовать метод извлечения классов для рефакторинга.

что такое рефакторинг

Вернемся назад и посмотрим на «что такое рефакторинг».

  • Улучшить внутреннюю структуру программного обеспечения без изменения его наблюдаемого поведения

  • для улучшения понимания и снижения затрат на модификацию

    摘自《重构 - 改善既有代码的设计》(下面简称《重构》)
    

При реконструкции?

Нам нужно внести ясность: рефакторинг — это не то, что следует откладывать на определенный период времени. Рефакторинг — это не конец, но рефакторинг может помочь вам добиться цели.

Есть только три вещи, три реконструкции

  1. Повторяющаяся работа, когда существующий код не помогает легко добавлять новые функции.
  2. Логика устранения неполадок при исправлении ошибок
  3. обзор кода позволяет другим просматривать код, чтобы проверить, читабельен ли он и понятен
  4. Слишком много кода раскомментировано, и даже я не могу быстро разобраться в логике кода

Реконструкция

  • Количество: количество строк кода
  • Качество: сложность кода, связность, удобочитаемость, сложность, зависящая от архитектуры, и т. д.
  • стоимость: потраченное время
  • Вознаграждение (результат): поддержка быстрого наложения последующих функций, решение существующих противоречий, которые невозможно оптимизировать из-за проблем с дизайном кода и т. д.

Получить точку Получить точку

Наговорив столько глупостей, на самом деле все понимают, что теории, не интегрированные с практикой, пусты.

но重构а также设计模式Точно так же он также требует процесса «обучение — понимание — прорыв». Изучение первого шага позволяет вам понять основные методы реконструкции, практика второго шага пробуждает вашу память и применение методов реконструкции, а применение и практический опыт третьего шага стимулирует ваше мышление, понимание и обобщение. гибкое использование.

Все люди всегда учатся и постоянно пересматривают, чтобы достичь конкретных приложений в конкретных сценариях и быть гибкими. Рефакторинг — это большая тема, и автор «Рефакторинга» сам пережил множество проектов и навыков рефакторинга, которые были суммированы после многолетнего опыта.

Советы по рефакторингу

Методов рефакторинга, обобщённых автором книги «Рефакторинг», слишком много, и мы можем показать лишь обобщённый всеми авторами список рефакторингов в картинках.
Для конкретных добавок вы можете увидеть"Реконструкция"Эта книга.

Практика рефакторинга

Один из подходов, рекомендованных автором:

  1. 随机挑选一个目标Начните с выбора для себя цели (типа "избавиться от кучи ненужных подклассов"), затем двигайтесь к цели, делая маленькие, но твердые шаги
  2. 没把握就停下来Когда вы не можете доказать, что все, что вы сделали, может гарантировать логику и семантику исходной программы, пожалуйста, остановитесь и подумайте: улучшился ли существующий рефакторинг или он не дает результатов и его нужно отменить.
  3. 保证每次重构后的测试都能正常跑通

Как разработчик, вы должны рассматривать рефакторинг как часть разработки и проводить рефакторинг по мере разработки. На основе быстрого стекирования кода и реализации основных необходимых функций напишите тестовые случаи, чтобы убедиться, что функции остаются неизменными, и постепенно проводите рефакторинг.
Это наша команда попросила всех понять эту причину реконструкции двери основных навыков. Хорошие программисты должны избегать низкого кода качества.

Дело реконструкции

сюжетная сцена

  1. Есть три типа фильмов, которые клиенты могут взять напрокат
  2. Правила аренды
    1. Правила расчета цены:
      Обычный фильм - начальная цена 2 ¥, а часть, превышающая 2 дня, будет стоить 1,3 юаня за фильм в день.
      Новые фильмы — 3 юаня за фильм в день.
      Детские фильмы - начиная с 2¥, порция свыше 3 дней будет стоить 0,8 юаня за фильм в день.
    2. Правила начисления баллов:
      Добавляйте 1 балл за каждый фильм, который вы берете взаймы, и добавляйте 2 балла за каждый новый фильм.

исходный код

Результат программы: (пожалуйста, убедитесь, что результат не изменился после рефакторинга~)

  • Диаграмма классов

Если вам интересно, вы можете сначала просмотреть исходный код, рассмотреть исходные отношения объектов, а затем подумать о том, как реорганизовать код. В исходном коде на самом деле есть много проблем, которые нужно копать. Ниже приводится наше обсуждение:

  • Разделенные обязанности, следуйтеПринцип единой ответственности
    • Функция печати счета-фактуры выполняет множество функций, включая расчет расходов, расчет баллов, отображение результатов и т. д.
      • Решение 1:6.1 Метод извлечения- Наиболее часто используемый метод реконструкции
      • Решение 2:9.1 Разлагают условное (разложение условное выражение)
    • Класс пользователей берет на себя обязанности, которые ему не принадлежат, в том числе: правила начисления платы, правила начисления баллов. Эти обязанности должны быть в жанре кино.
  • Разберитесь с бизнес-логикой, такой как правила начисления и правила начисления баллов — см. сюжетную сцену
  • Не обращайтесь к данным объекта напрямую. Другим объектам легко изменить данные объекта, при этом объект, владеющий данными, ничего об этом не знает.
    • решение:8.10 Инкапсулировать поле- Разделение данных и поведения
  • Рефакторинг не должен восприниматься внешним миром, чтобы убедиться, что тестовые примеры все еще выполнимы.

частичный рефакторинг

Чтобы лучше продемонстрировать метод реконструкции, мы используем TS и проводим частичную реконструкцию в соответствии с приведенным выше обсуждением.Метод реконструкции фактически определяется в соответствии с будущим направлением расширения бизнеса, и оптимального решения не существует.Если вы заинтересованы , вы можете присоединиться к нам, выскажите свое мнение~

  • Рефакторинг отношения диаграммы классов

основные навыки

  • Делайте небольшие шаги и часто тестируйте (убедитесь, что у вас достаточно тестов для поддержки ваших действий по рефакторингу)
  • Используйте интеллектуальные инструменты разработки (например, VSCode Щелкните правой кнопкой мыши могут разбирать длинный код функции в функционал)

Рекомендуемые книги

На самом деле рефакторинг — это долгосрочная инвестиция с высоким соотношением затрат и результатов. Студенты, заинтересованные в рефакторинге, могут подписаться на рубрику или отправить свое резюме на tao.qit####alibaba-inc.com'.replace('####', '@'). Приветствуются люди с высокими идеалами присоединиться~

Оригинальный адрес:GitHub.com/proto team/no…