Saturday, October 9, 2010

Продолжаю выделять методы)

Ну вот, уже прошла неделя с того момента как я начал переписывать extract method. С одной стороны, это не так уж много, если брать в расчет относительную сложность рефакторинга, с другой стороны, мне немного обидно, что не удалось уложиться в одну неделю. Более того, для окончательной доводки требуется еще дня 3.
Модель этого рефакторинга очень проста. Все представляется в виде списка параметров, которые необходимо либо передать внутрь, либо возвратить, либо протащить через метод. Возвращаемое значение тоже является таким параметром. Бывают фиктивные параметры типа Boolean, которые необходимо возвратить из метода, чтобы восстановить поток управления в месте вызова. Из всего списка параметров выбирается наиболее подходящий кандидат для возвращаемого значения, остальные становятся обычными параметрами. В настройках, конечно, можно выбрать другое возвращаемое значение или сделать метод типа void. Именно от параметра, выбранного в качестве возвращаемого значения зависит то, как будет преобразован код выделенного фрагмента, и как будет сконструирован вызов нового метода.
Люблю, когда модель получается простой. Не могу сказать, что для меня сразу стало очевидно, что возможность выделить из кода подпоследовательность - это просто еще один 'out' параметр, который чаще всего по умолчанию становится возвращаемым значением.
В ситуации когда в настройках можно что-то менять, возникает вопрос - как тестировать поведение при различных параметрах? У меня есть любимый алгоритм для таких ситуаций. Не самый оптимальный, конечно, но работает на ура! Называется - полный перебор. Да, выбор возвращаемого значения, выбор сущности, которую создать, передавать или нет конкретные параметры - вариантов довольно много, но не смертельно. Нет ничего невозможного в том, чтобы перебраться все комбинации и посмотреть что получится. И никаких больше настроек для конкретного теста!

No comments:

Post a Comment