Лекция: RECONCILE DIFFERENCES (СОГЛАСОВАНИЕ РАЗЛИЧИЙ)
Каким образом пм можете унифицировать два схожих фрагмента кода? Постепенно делайте их все более похожими друг на друга. Унифицируйте их только в случае, если они абсолютно идентичны.
Подчас выполнение рефакторнига — это весьма нервная работа. Простые ре- факторинг)! очевидны. Если я извлекаю метод и делаю это механически корректно, вероятность того, что поведение системы изменится, чрезвычайно мала. Однако некоторые из рсфакторимгов заставляют вас внимательно анализировать последовательность выполнения операций и порядок модификации данных. Построив длинную цепочку умозаключений, вы приходите к выводу, что запланированное вами изменение кода, скорое всего, не приведет к изменению поведения системы. Однако любой подобный рефакторинг уменьшает количество волос на вашей голове
Сложные рефакторинги — это именно то. чего мы пытаемся избежать, когда придерживаемся стратегии маленьких шажков и конкретной обратной связи. Полностью избежать сложных рефакгорингов невозможно, однако можно уменьшить сферу их влияния на остальной ход.
Подобные рефакторинги возникают на разных уровнях:
· Два цикла выглядят похоже. Если вы сделаете их идентичными, вы можете объединить их в единый цикл.
· Две ветви условного оператора выглядят похоже. Сделав их идентичными, вы можете избавиться от условного оператора.
· Два метода выглядят похоже. Сделав их идентичными, вы можете избавиться от одного из них.
· Два класса выглядят похоже. Сделав их идентичными, вы можете избавиться от одного из них.
Иногда задачу согласования различий удобнее решать в обратном порядке. Иными словами, вы представляете себе самый тривиальный последний этап этой процедуры, а затем двигаетесь в обратном направлении. Например, если вы хотите избавиться от нескольких подклассов, наиболее тривиальный последний шаг можно будет выполнить в случае, если подкласс ничего не содержи i В этом случае везде, где используется подкласс, можно будет использовать суперкласс, при этом поведение системы не изменится. Что надо сделать, чтобы очистить подкласс от методов и данных? Для начала метод можно сделать полностью идентичным одному из методов суперкласса. Постепенно переместив все методы и все данные в суперкласс, вы сможете.заменить ссылки на подкласс ссылками на суперкласс. После этого подкласс можно уничтожить.