Пара наблюдений:
На руках:
1. У тебя никогда не было времени сделать это.
Если вы относитесь к ре-факторингу как к чему-то отдельному от кодирования (вместо приличной части кодирования прилично), и если вы не можете управлять временем, то да, у вас никогда не будет времени для этого.
- «Переключение контекста» ментально дорого (трудно оставить то, что вы делаете в середине этого).
См. Предыдущий пункт выше. Рефакторинг является активным компонентом хорошей практики кодирования. Если вы разделяете их, как если бы они были двумя разными задачами, то 1) ваши методы кодирования нуждаются в улучшении / совершенствовании, и 2) вы будете подвергаться серьезному переключению контекста, если ваш код нуждается в серьезном рефакторинге (опять же, качестве кода). )
- Обычно это непростая задача.
Только если ваш код не подлежит рефакторингу. То есть код, который трудно реорганизовать, имеет одно или несколько из следующих значений (список не является универсальным):
- Высокая цикломатическая сложность ,
- Нет единой ответственности за класс (или процедуру),
- Высокая связь и / или плохая низкая когезия (также плохая LCOM метрика ),
- плохая структура
- Не соответствует принципам SOLID .
- Нет соблюдения Закона Деметры , когда это необходимо.
- Чрезмерное соблюдение Закона Деметры , когда неуместно.
- Программирование с использованием реализаций, а не интерфейсов.
- Всегда есть страх, что ты сломаешь то, что сейчас работает.
Тестирование? Проверка? Анализ? Что-нибудь из этого перед тем, как быть проверенным в системе контроля версий (и, конечно, прежде чем быть доставленным пользователям)?
С другой стороны:
1. Использование этого кода подвержено ошибкам.
Только если он никогда не тестировал / проверял и / или если нет четкого понимания условий и моделей использования, при которых потенциально подверженный ошибкам код работает приемлемо.
- Со временем вы можете понять, что если бы вы реорганизовали код,
первый раз, когда вы это увидели - это сэкономило бы ваше время в долгосрочной перспективе.
Это осознание не должно происходить со временем. Хорошая инженерная и рабочая этика требует, чтобы эта реализация произошла, когда создается артефакт (аппаратное или программное обеспечение).
Так что мой вопрос - Практически - Когда вы решите, что пришло время реорганизовать ваш код?
Практически , когда я пишу код; Я обнаруживаю область, которая нуждается в улучшении (или что-то, что нуждается в исправлении после изменения требований или ожиданий); и я получаю возможность улучшить его, не жертвуя сроками. Если в этот момент я не могу повторно учесть фактор, я просто документирую обнаруженный дефект и создаю работоспособный, реалистичный план пересмотра артефакта для рефакторинга.
В реальной жизни будут моменты, когда мы будем кодировать какой-то уродливый кладж, просто чтобы все заработало, или потому что мы истощены и устали или что-то в этом роде. Это реальность. Наша задача - обеспечить, чтобы эти инциденты не накапливались и оставались без присмотра. И ключом к этому является рефакторинг при кодировании, сохранение кода простым и с хорошей, простой и элегантной структурой. И под «элегантным» я не подразумеваю «умную задницу» или эзотерику, но это показывает то, что обычно считается читаемыми, простыми, компонуемыми атрибутами (и математическими атрибутами, когда они применяются практически).
Хороший код поддается рефакторингу; отображает хорошие показатели; его структура напоминает составление функций информатики и составление математических функций ; у него есть четкая ответственность; это делает его инварианты, предварительные и постусловия очевидными; и так далее и тому подобное.
Надеюсь, это поможет.