фактически все тело оперируемого пациента покрыто специальной
про стыней
за
исключением
места,
на
котором,
собственно,
о существляется операция. Благод аря
такому покрытию хирург имеет
д ело с фиксированным набором переменных. Перед выполнением
операции врачи сколь угод но д олго могут обсужд ать, какое влияние на
зд оровье пациента оказывает тот или иной орган,
од нако во время
операции внимание хирурга д олжно быть сфокусировано.
Вы можете обнаружить, что по сле того,
как вы изолировали
изменение, а затем внесли это изменение в код , результат получился
настолько тривиальным, что вы можете отменить изоляцию. Например,
если мы
обнаружили, что внутри метод а findRate() д олжно
присутствовать всего од но д ействие – возврат значения поля, мы можем
вместо обращений к метод у findRate() напрямую обратиться к полю. В
результате метод findRate() можно буд ет уд алить. Од нако под обные
изменения не след ует выполнять автоматически.
По старайтесь найти
баланс
межд у
затратами,
связанными
с
использованием
д ополнительного метод а, и пользой, которую прино сит д ополнительная
концепция, д обавленная в код .
Для изоляции изменений можно использовать несколько разных
спо собов. Наиболее часто используется шаблон «Выд еление метод а»
(Extract Method), помимо него также используются «Выд еление объекта»
(Extract Object) и «Метод в объект» (Method Object).
Миграция данных (Migrate Data)
Как можно перейти от од ного пред ставления к д ругому? Временно
д ублируйте д анные.
Как
Вначале рассмотрим версию «от внутреннего к внешнему». В
рамках этого под ход а вы изменяете вначале внутреннее пред ставление, а
затем внешний интерфейс.
1. Созд айте переменную экземпляра в новом формате.
2. Инициализируйте переменную нового формата везд е, гд е
инициализируется переменная старого формата.
3. Используйте переменную нового формата везд е, гд е используется
переменная старого формата.
4. Уд алите старый формат.
5.
Измените внешний интерфейс так, чтобы использовать новый
формат.
Од нако в некоторых ситуациях уд обнее сначала изменить API. В
этом случае рефакторинг выполняется след ующим образом.
1. Добавьте параметр в новом формате.
2. Обеспечьте преобразование параметра в новом формате во
внутреннее пред ставление, облад ающее старым форматом.
3. Уд алите параметр в старом формате.
4. Замените использование старого
формата на использование
нового формата.
5. Уд алите старый формат.
Зачем
Проблема миграции д анных возникает кажд ый раз, когд а
используется шаблон «От од ного ко многим» (One to Many).
Пред положим, что мы хотим
реализовать объект TestSuite, используя
шаблон «От од ного ко многим» (One to Many). Мы можем начать так:
def testSuite(self):
suite = TestSuite()
suite.add(WasRun("testMethod"))
suite.run(self.result)
assert("1 run, 0 failed" == self.result.summary())
Чтобы реализовать этот тест, начнем с од ного элемента test:
class TestSuite:
def add(self, test):
self.test = test
def run(self, result):
self.test.run(result)
Теперь мы приступаем к д ублированию д анных. Вначале
инициализируем коллекцию тестов:
Do'stlaringiz bilan baham: