Итеративный, эволюционный рефакторинг - это хороший подход, но сначала ...
Что-то, что не должно остаться незамеченным ...
Чтобы опираться на некоторые высокоуровневые заметки выше,Вы должны понимать некоторые важные понятия из Теория сложных систем .Ключевые понятия, на которые следует обратить внимание, заключают в себе структуру окружающей среды системы, ее развитие, поведение и компоненты.
Чувствительная зависимость от начальных условий (Теория хаоса):
Поведение системы будет усилено в сторону ее наиболее влиятельной тенденции - то есть, если у вас много Сломанных окон , которые влияют на то, как разработчик напишет следующий модуль или будет взаимодействовать с существующим, тогдаэтот разработчик, скорее всего, сломает другое окно.Даже заманчиво разбить окно только потому, что оно не сломано.
Энтропия:
Существует множество определений энтропии ;тот, который я считаю становящимся разработчиком программного обеспечения: Количество энергии в системе, которое нельзя использовать для дополнительной работы .Вот почему повторное использование имеет решающее значение .Энтропия встречается в основном с точки зрения дублирования логики и понятности.Кроме того, это тесно связано с Butterfly Effect (чувствительной зависимостью от начальных условий) и разбитыми окнами - чем больше дублирующейся логики, тем больше CopyPaste для дополнительных реализаций и больше1X за реализацию, чтобы поддерживать все это.
Переменная Усиление и демпфирование (Теория появления и теория сети):
Разрушение плохого дизайна - хорошая реализация, хотя кажетсявесь ад разваливается, когда это происходит в первые несколько раз.Вот почему разумно иметь архитектуру , которая может поддерживать множество адаптаций .Поскольку ваша система движется к энтропии, вам нужен способ, чтобы модули правильно взаимодействовали друг с другом - вот где вступает Интерфейсы . Если каждый из ваших модулей не может взаимодействовать, если они не согласились на согласованный контракт,Без этого вы увидите, что ваша система немедленно начнет приспосабливаться к плохим реализациям - и какое бы колесо ни скрипнуло, вы получите масло;другие модули станут головной болью.Таким образом, не только плохие реализации вызывают больше плохих реализаций, они также создают нежелательное поведение в System Scale - заставляя вашу систему в целом адаптироваться к различным реализациям и усиливая энтропию в самом высоком масштабе.Когда это происходит, все, что вы можете сделать, это продолжать исправлять ошибки и надеяться, что одно изменение не будет конфликтовать с этими адаптациями - вызывать возникающие непредсказуемые ошибки.
Ключом ко всему этому является превращение ваших модулей в их собственные,дискретные подсистемы и предоставляют Определенную архитектуру , которая может позволить им обмениваться данными, такие как Mediator .Это приводит набор ( Decoupled ) поведения в Bottom-Up System , которая затем может сосредоточить свою сложность в компоненте, предназначенном именно для него.
С этим типомархитектурного подхода, вы не должны испытывать значительную боль на 3-м сроке «красный, зеленый, рефакторинг»Вопрос в том, как ваш мастер схватки может измерить это с точки зрения выгоды для пользователя и заинтересованных сторон ?