Введение в статью Wulin.com (www.vevb.com): Слово рефакторинг был первоначально определен Мартином Фаулером и Кентом Бек. Это модификация, которая облегчает внутреннюю структуру программного обеспечения легче понять и облегчает изменение программного обеспечения без изменения видимого поведения программного обеспечения ... это ограниченный способ организовать код и минимизировать вероятность генерации ошибок.
Иногда программисты приходят ко мне и говорят, что им не нравится дизайн чего -то, и мы должны дать ей комплексную реконструкцию, чтобы исправить ошибки в нем. О, о. Это не похоже на хорошую идею. И это не похоже на рефакторинг ...Слово рефакторирование было первоначально определено Мартином Фаулером и Кентом Беком. Это модификация, которая облегчает внутреннюю структуру программного обеспечения легче понять и облегчает изменение программного обеспечения без изменения видимого поведения программного обеспечения ... это ограниченный способ организовать код и минимизировать вероятность генерации ошибок.
Результатом реконструкции является то, что методы ярлыка упоминаются, дублируют и мертвый код удаляются, что делает дизайн и логику более четкой. Это лучше использовать языки программирования и умнее. Это преимущество использования информации, которую вы знаете сейчас, но разработчик в то время не знал - или не использовал ее. Непрерывно упрощайте код, чтобы облегчить его пониманию. Непрерывно облегчайте их будущие изменения и безопаснее.
Во время этого процесса были найдены ошибки, и были изменены ошибки, что не является реконструкцией. Оптимизация не является реконструкцией. Укрепление захвата исключений и добавление профилактического кода не является рефакторией. Упрощение проверки кода не является рефакторингом, хотя рефакторинг может достичь того же эффекта. Все эти вещи полезны. Но ни один из них не рефакторирует.
Программисты, особенно те, кто выполняет работу по техническому обслуживанию, очистка кода - одна из их ежедневных задач. Это основная работа и должна быть сделана. Вклад Martin Fowler et al. это форматирование наилучших методов практики кода рефакторирования и архивирования общих и доказанных эффективных моделей рефакторинга - цели рефакторинга и шаги рефакторинга - для классификации архива.
Рефакторинг простой. Написание тестов перед написанием кода как можно больше может помешать вам ошибаться. Небольшие, независимые и безопасные структурные корректировки кода и проверяют их после каждой корректировки, чтобы убедиться, что вы не изменяете характеристики поведения кода - функции совпадают с такими же, как и раньше, но код выглядит по -разному. Режим рефакторинга и современные инструменты рефакторинга IDE делают рефакторинг легким, безопасным и недорогим.
Не рефактор ради рефакторинга
Рефакторинг может рассматриваться как мера, которая может помочь вашему коду изменять. Рефакторинг кода должен быть сделан до того, как вы внесете изменения кода, что позволит вам быть уверенным, что вы понимаете код и облегчат и безопаснее внедрить изменения в код. Выполните регрессионный тест на ваше рефакторическое действие. Затем внесите исправления или изменения. Проверьте снова. Позже, больше кода может быть отражена, чтобы сделать ваше изменение кода более четким. Полный тест снова. Реконструируйте и снова изменитесь. Или изменить, а затем рефактор.
Вы не рефакторируете ради рефакторинга, вы рефакторируете, потому что хотите делать другие вещи, и рефакторинг может помочь вам достичь этих вещей.
Объем рефакторинга должен определяться изменениями кода или коррекции кода, которые вам необходимы для реализации - что вы должны сделать, чтобы сделать код более безопасными и более лаконичными? Другими словами: не рефактор ради рефакторинга. Не рефактор код, который вы не собираетесь менять или не изменитесь.
Рефакторинг царапин для понимания (рефакторинг царапин)
Книга Майкла Феро «Эффективно работая с устаревшим кодом» упоминает концепцию рефакторирования царапин; Мартин Фаулер называет это рефакторинг для понимания. Это используется, чтобы справиться с (или не терпеть) код, который вы не понимаете, очистите их, чтобы вы могли лучше понять, что они делают, прежде чем вы фактически измените его, и это также поможет вам отладить эти коды. Как только вы сможете понять истинное намерение переменной или метода, переименовать их, дайте им более подходящее имя, удалите код, который вы не любите читать (или найти бесполезные), разобрать сложные условные утверждения и разбить длинные программы в несколько простых для понимания мини-программ.
Не беспокойтесь о просмотре или тестировании этих изменений. Это значит, что ваша реконструкция быстро прогрессирует - это позволяет эти коды и то, как они работают, чтобы произвести быстрый, но неполный прототип в вашем мозге. Учитесь у него и выбросьте их. Краткая реконструкция также может позволить вам попробовать различные методы реконструкции и узнать больше методов реконструкции. Michael Feathers предполагает, что вы должны обратить внимание на вещи, которые кажутся бесполезными или особенно полезными в процессе, чтобы вы могли делать вещи правильно после выполнения этого упражнения и действительно изменить их - сделать немного путем при изменении, обращать внимание на метод, и изменить и тестировать.
Что такое крупномасштабная реконструкция?
Простая, но очевидная реконструкция кода: устранение дублирования, изменение и изменение переменных и имен методов, чтобы сделать его более значимым, уточнить методы, чтобы упростить код для понимания и повторного использования, упростить условную логику, заменить бессмысленные числа на именованные переменные и объединить аналогичные коды. Благодаря этим рефактованию вы можете получить огромные вознаграждения с точки зрения понимания и обслуживания кода.
По сравнению с этими меньшими, встроенными реконструкциями, более значительные реконструкции дизайна значительно отличаются от них - это то, что Мартин Фаулер называет большими реконструкциями. Большие, дорогостоящие изменения происходят с большим количеством технических рисков. Это не код очистки и улучшение дизайна в процессе программирования: это фундаментальный редизайн.
Некоторым людям нравится называть редизайну, переписать или перестроить систему или переделать систему, называемую крупномасштабной реконструкцией. Поскольку технически они не изменяют функциональные характеристики программного обеспечения - бизнес -логика, ввод программного обеспечения и вывод все же, как и раньше, но реализация проектирования и кода изменилась. Разница между ним и обычной реконструкцией, по -видимому, состоит в том, чтобы переписать кусок кода, а другой - переписать систему. Пока вы делаете это шаг за шагом, вы можете назвать это реконструкцией - независимо от того, находитесь ли вы в ловушке в замене старой системы на новый код на много лет или крупномасштабным преобразованиям системной архитектуры.
Крупномасштабное рефакторинг будет ужасным. Для завершения могут занять недели, месяцы (или даже годы), и вам необходимо внести изменения во многие части программного обеспечения. Программное обеспечение не будет работать в результате, и эти изменения должны быть выпущены несколько раз. Вы должны выполнять временные строительные леса и обходные пути, особенно когда вы используете методы гибкой разработки с коротким циклом. В настоящее время, практический метод, такой как Branch By Abstract, пригодится, который может помочь вам управлять изменениями в вашем коде в течение длительного периода времени.
И при разработке нового кода вы также должны поддерживать старый код, что делает управление версией кода очень хлопотным и неудобным для изменения, делая код очень хрупким и простым в ошибках - это противоречит предполагаемой цели реконструкции. Иногда эта ситуация продолжается - этот процесс чередующегося нового и старого кода никогда не может быть завершен, потому что наилучшее преимущество выполняется первым, или потому, что консультант, который первоначально принес эту идею, сделал что -то еще, или бюджет был уменьшен, и вы ненавидите поддерживать такой проект откладывания.
Это рефакторинг-это не
Неправильно включать концепцию реконструкции в такую тяжелую разработку проекта. Это в основном еще одна работа, с совершенно разными затратами на развитие и рисками. Это сбивает с толку понимание того, что такое реконструкция и что может сделать реконструкция.
Рефакторинг может и должен быть интегрирован в ваш процесс написания или поддержания вашего кода - как неотъемлемая часть ежедневного управления развитием/качеством, так же, как написание тестов и обзоров кода. Рефакторинг должен быть завершен спокойно, непрерывно и непрерывно. Это требует, чтобы мы разделяли на нее энергию нашей работы, и он должен учитывать его существование в нашей оценке и оценке рисков. Если все сделано правильно, вам не нужно объяснять или проверять эту часть работы посторонним.
Потратить несколько минут или два часа или два на рефактор, похоже на модификацию вашего процесса разработки и является частью работы. Если это займет вам дни или дольше, это не рефакторинг; Это переписывание или редизайн. Если вам нужно явно отложить часть времени (или весь цикл спринта), чтобы реорганизовать код, если вам нужно подать заявку на одобрение для очистки кода или использовать код в качестве требования к разработке, то вы не рефактор - даже если вы используете методы рефакторинга и инструменты, вы все еще выполняете другую работу.
Некоторые программисты считают, что это их право и обязательство вносить фундаментальные и значительные изменения в Кодексе, и они перепроектируют и переписывают их во имя рефакторинга, чтобы они не ослабили свои навыки в будущем. Переработка и переписывание иногда правильное. Но из откровенности и ясности, пожалуйста, не дайте этой деятельности название реконструкции.