| Рефакторинг, первый пример | Страница 8 |
Первая фаза рефакторинга в этой главе показывает, как я расщепляю длинный метод и переношу его кусочки в более подходящие классы. Главная задача -- упростить написание метода htmlStatement с минимальным дублированием кода.
Мой первый шаг -- найти логический кусочек кода и применить рефакторинг Extract method (110). Очевидный кусок -- это блок switch. Он выглядит неплохим кандидатом на вынесение в отдельный метод.
Когда я провожу извлечение метода, как и любой другой рефакторинг, неплохо знать, что можно сделать неправильно. При некорректном извлечении метода можно внести ошибку в программу. Таким образом, перед тем как делать рефакторинг, нужно понять, как сделать это безопасно. Я уже делал такой рефакторинг несколько раз и записал безопасную последовательность шагов.
Первым делом нужно изучить фрагмент програмы на предмет локальных переменных и параметров, являющихся локальными в блоке, который мы собираемся вынести в новый метод. Этот сегмент программы содержит две такие переменные: each и thisAmount. Из них each не изменяется в дальнейшем коде, а thisAmount изменяется. Любые немодифицируемые переменные можно передавать как параметры метода. Mодифицируемые требуют большего внимания. Если такая переменная единственная, то её значение можно вернуть из метода. В нашем случае thisAmount инициализируется 0 на каждом шаге цикла и не изменяется вне блока switch. Таким образом, её можно просто вернуть из метода.
Следующие две страницы показывают код до и после рефакторинга. С левой стороны код до, а с правой -- после. Код, извлекаемый из оригинала, и любые изменения в новом коде выделены жирным шрифтом. В дальнейшем в этой главе я буду придерживаться таких же соглашений.
[прим. переводчика: я решил не объединять
подобные пары страниц в один HTML, поэтому ориентируйтесь по номеру страницы;
четные страницы в книге слева, то есть "код до" находится на четных, а
"код после" -- на нечетных страницах]
Оглавление | << страница 7 | страница 10 >>