:notebook: Эта статья была заархивирована в: "blog"
Когда я впервые прочитал «Рефакторинг: улучшение дизайна существующего кода», я сделал простую заметку. Недавно, благодаря участию в проекте рефакторинга, я снова просмотрел статью «Рефакторинг: улучшение дизайна существующего кода». В процессе проросло стремление добросовестно подытожить и систематизировать метод рефакторинга, так появилась эта серия текстов.
Есть еще несколько незаконченных статей о плохом запахе кода, и я добавлю их позже. . .
болезнь и медицина
Мысли о неприятном запахе кода
«Если вы больны, вы должны лечить это на ранней стадии и не отказываться от лечения». Какая простая истина, которую все понимают.
Быть больным значит быть нездоровым.
Когда люди больны, их можно лечить с помощью инъекций, лекарств и хирургического вмешательства.
Если плохой запах кода (проблемы качества кода) сравнивают с болезнью, то рефакторинг — это лекарство от плохого запаха кода.
Люди считают, что на реактивацию вы также можете применить правду:
-
Предотвратить болезнь, прежде чем это произойдет.—— Бянь Цюэ, известный врач периода Весны и Осени и периода Сражающихся царств, однажды высказал очень известное медицинское мнение:профилактика болезни. Думаю, то же самое относится и к рефакторингу программного кода. Перед программированием должен быть разумный дизайн, а при программировании - хороший стиль программирования, чтобы свести к минимуму проблемы. На этом уровне понимание запахов плохого кода заключается не только в поиске проблем и их устранении. Более важная роль состоит в том, чтобы помочь нам сознательно избегать этих проблем в процессе программирования.
-
Легко получить серьезные заболевания без лечения легких заболеваний.— Лю Бэй сказал: «Не делай добра по мелочам, не делай зла по мелочам». Если проблема будет обнаружена, она будет вовремя исправлена, и качество кода естественным образом войдет в круг благоразумия, и наоборот. Обратите внимание на накопленную мощность, не думайте всегда, что есть небольшая проблема с кодом, это не проблема.
-
Назначьте правильное лекарство.- программа есть проблема, чтобы проанализировать корень проблемы, целенаправленно разработать разумную программу реконструкции. Мы все знаем последствия того, чтобы съесть тебя, то же самое,лучше не менять.
-
Избегайте сильных наркотиков—— Лекарства, используемые для лечения, подвержены побочным эффектам. Другими словами: если сделать большой шаг, легко вытащить яйца. Если реконструкция кардинальная, то надо быть морально готовым к тому, что в любой момент вас вышвырнут на улицу. Изобретение велосипеда — это не рефакторинг, это переписывание. Рефакторинг должен быть постепенным, поэтапным процессом. Когда вам кажется, что переписать код проще, чем провести его рефакторинг, это часто является признаком того, что вам уже пора заняться рефакторингом.
принципы рефакторинга
Раньше проблемы с качеством кода сравнивали с болезнями, а рефакторинги — с медициной. Здесь мы подробнее обсудим принципы рефакторинга.
Что такое рефакторинг (Что)
重构(Refactoring)
Обычное определение программной системы заключается в улучшении внутренней структуры программной системы без изменения ее внешнего поведения.
Лично я нахожу это определение немного неудобным. Это можно понять так: Рефакторинг — это акт лечения кода. Больной код относится к проблемам с качеством (надежностью, безопасностью, возможностью повторного использования, ремонтопригодностью) и производительностью кода.
Цель рефакторинга — улучшить качество и производительность кода..
ПРИМЕЧАНИЕ. Неполная или неправильная функциональность является кодом инвалидности. Как лекарство не может излечить инвалидность, так и реконструкция не может решить функциональную проблему.
Зачем проводить рефакторинг (почему)
Полистайте книгу, поищите в интернете, и причины для рефакторинга примерно те же:
- Рефакторинг для улучшения дизайна программного обеспечения
- Рефакторинг для облегчения понимания программного обеспечения
- Рефакторинг помогает найти ошибки
- Рефакторинг повышает скорость программирования
Короче,Рефакторинг может улучшить качество кода.
Когда проводить рефакторинг (Когда)
Что касается того, когда проводить рефакторинг, позвольте мне сначала процитироватьРефакторинг — это не то, как его делать, а то, когда его начинать.точка зрения статьи.
Для быстрорастущей компании остановите развитие бизнеса и сосредоточьтесь на проектах рефакторинга.никогда не приемлемый вариант, "замена двигателя во время вождения самолета" - это то, чего хочет такая компания.
Давайте посмотрим на затраты и преимущества рефакторинга.
-
стоимость рефакторинга
Рефакторинг требует затрат, не говоря уже о затратах времени и труда (время, рабочая сила), и может привести к ошибкам в программах, которые изначально работали нормально. Поэтому у многих людей менталитет «не ищи заслуг, но и не ищи недостатков».
Есть и цена: рефакторинг использует более новые и сложные технологии, кривая обучения не является гладкой, членам команды сложно переключаться между технологиями, а эффективность разработки может не повышаться, а снижаться в краткосрочной перспективе.
Однако если код оставить гнить, технический долг будет становиться все более и более тяжелым. Когда код, наконец, исчерпан, архитекторам часто приходится применять агрессивные меры, чтобы вылечить недостатки кода. Однако этот процесс часто очень болезненный и сопряжен с высоким риском неудачи.
-
преимущества рефакторинга
Преимущество рефакторинга заключается в улучшении качества и производительности кода, а также в повышении эффективности будущих разработок. Тем не менее, следует отметить, что рефакторинг часто не приносит практической пользы в краткосрочной перспективе, либо его трудно увидеть интуитивно. Для бизнеса нет ничего важнее эффективности. Другими словами, вещи, которые не имеют реальной пользы, обычно также бесполезны. Многим руководителям, особенно нетехническим, все равно, какие новые технологии вы применяете, насколько элегантным становится код и т. д.
-
Подходящее время для рефакторинга
Судя по вышесказанному, рефакторинг действительно неблагодарная вещь.
В результате многие люди поддались злым KPI и смертельным дедлайнам, жалуясь при этом, что предыдущий код был мусором, а сами делали мусор.
Однако **реконструкция должна быть постепенным процессом, не только ремоделирование, которое повреждает мышцы и кости, называется рефакторингом. **Если вам нужно дождаться, пока код сгниет до смерти, а затем использовать радикальный способ рефакторинга, это должно быть сложно и крайне рискованно.
Время рефакторинга, упомянутое в книге «Рефакторинг», должно быть связано с добавлением функций, исправлением функций и просмотром кода. Не рекомендуется тратить время на выполнение проектов рефакторинга.
Я думаю, что идея в том, что:Рефакторинг должен быть постепенным эволюционным процессом в реальном времени во время разработки.
-
Неподходящее время для рефакторинга
Однако здесь я также хотел бы подчеркнуть:Не все процессы разработки программного обеспечения подлежат рефакторингу.
более способныйСценарии, подчеркивающие ценность реконструкцииДа: больший размер кода, более длительный жизненный цикл, больше обязанностей, единая кодовая база, над которой работает большая (и менее стабильная, с высокой текучестью) команда.
Напротив, есть несколько сценариев, в которых ценность рефакторинга минимальна:
- Жизненный цикл кодовой базы подходит к концу, и разработка постепенно сводится к сопровождению.
- Текущая версия кодовой базы вот-вот будет выпущена, и рефакторинг, несомненно, навлечет на себя неприятности.
- Стоимость рефакторинга слишком велика: трудно гарантировать правильность и стабильность рефакторинговых функций, слишком развита технология, а техническая миграция членов команды слишком сложна.
Как провести рефакторинг (как)
Поведение при рефакторинге, на мой взгляд, тоже может быть иерархическим. От высокого к низкому, чем выше уровень, тем сложнее:
-
сервис, база данных Современное программное обеспечение часто бывает сложным и большим. Использование микросервисов и переноса данных для разделения бизнеса и упрощения бизнеса стало мейнстримом. Однако тестирование и развертывание этих технологий сложны и технически сложны.
-
Компоненты, Модули, Фреймворки Рефакторинг компонентов, модулей и фреймворков в основном направлен на дизайн кода. Это решает проблему общей структуры кода. Требуется достаточное понимание фреймворков, шаблонов проектирования, распределения, параллелизма и т. д.
-
класс, интерфейс, функция, поле В книге «Рефакторинг» рассказывается о «плохих запахах кода» и связанных с ними методах рефакторинга. Все это средства рефакторинга кода на уровне класса, интерфейса, функции и поля. Поскольку метод реконструкции на этом уровне относительно прост, работоспособность высока. Подробнее читайте в главе «Дурной запах кода».
Реконструкция первых двух уровней уже задействовала архитектурный уровень, который оказывает большее влияние и является более сложным.Если навыка недостаточно, не меняйте его легко. Поскольку эти два уровня охватывают широкий спектр областей, они не будут здесь обсуждаться.
Вот разделительная линия. Ниже приведен ряд неприятных запахов кода. . .
плохой запах кода
«Рефакторинг: улучшение дизайна существующего кода» знакомит с 22 неприятными запахами кода и методами рефакторинга. Эти плохие вкусы могут быть далее классифицированы. Я всегда чувствую, что категоризация вещей помогает понять и запомнить. Итак, эта серия классифицирует дурные вкусы в соответствии с их характеристиками, а затем объясняет их одно за другим.
Раздувание кода с неприятным запахом кода
Раздутый кодЭтот набор неприятных запахов означает, что классы, функции и поля в коде не организованы должным образом, а просто нагромождены. Проблемы этого типа обычно незаметны в первые дни кода, но накапливаются по мере его роста (особенно, когда никто не работает над их устранением).
- слишком долгая функция
- негабаритный класс
- паранойя базового типа
- Слишком длинный столбец параметров
- грязь данных
Злоупотребление объектно-ориентированным кодом
Злоупотребления объектной ориентациейЭтот набор неприятных запахов означает: Код частично или полностью нарушает принципы объектно-ориентированного программирования.
Барьеры на пути к изменениям: плохой запах кода
Препятствующие изменениямЭтот набор неприятных запахов означает, что когда вам нужно изменить одну часть кода, вы обнаружите, что вам нужно изменить другие места. Это делает разработку программы сложной и дорогой.
Ненужный запах плохого кода
расходные материалыЭтот набор неприятных запахов означает, что такой код является необязательным, и его наличие влияет на чистоту и читабельность всего кода.
- слишком много комментариев
- повторяющийся код
- Класс резервирования
- Наивный класс данных
- риторика о будущем
Сочетание запахов плохого кода
МуфтыЭтот набор неприятных запахов означает: Чрезмерную связь между разными классами.
- комплекс привязанности
- Сексуальные отношения
- Пересвязанная цепочка сообщений
- посредник
- Несовершенный библиотечный класс
Расширенное чтение
- Плохой запах кода и рефакторинг
- Раздувание кода с неприятным запахом кода
- Злоупотребление объектно-ориентированным кодом
- Барьеры на пути к изменениям: плохой запах кода
- Ненужный запах плохого кода
- Сочетание запахов плохого кода
использованная литература
- Рефакторинг — улучшение дизайна существующего кода - by Martin Fowler
- https://sourcemaking.com/refactoring