Первая фаза рефэкторинга в этой главе показывает как я расщепляю длинный метод и переношу его кусочки в более подходящие классы. Главная задача - упростить написание метода htmlStatement с мимальным дублированием кода.
Мой первый шаг - найти логический кусочек кода и применить рифэкторинг Extract method (110). Очевидный кусок - это блок switch. Он выглядит неплохим кандидатом на вынесение в отдельный метод.
Когда я провожу извлечение метода, как и любой другой рифэкторинг, неплохо знать, что можно сделать неправильно. При некорректном извлечении метода можно внести ошибку в программу. Таким образом перед тем как делать рифэкторинг нужно понять, как сделать его безопасно. До этого я уже делал этот рифэкторинг несколько раз и записал безопасную последовательность шагов в каталог.
Первым делом нужно посмотреть на фрагмент програмы на предмет локальных переменных и параметров, являющихся локальными в блоке, который мы собираемся вынести в новый метод. Этот сегмент программы содержит две такие переменные: each и thisAmount. Из них each не изменяется в коде, а thisAmount изменяется. Любые немодифицируемые переменные можно передават как параметры метода. Mодифицируемые требуют большего внимания. Если такая переменная единственная, то ее значение можно вернуть из метода. В нашем случае thisAmount инициализируется 0 на каждом шаге цикла и не изменяется вне блока switch. Таким образом ее можно просто вернуть из метода.
Следующие две страницы показывают код до и после рифэкторинга. С левой стороны код до, а с правой - после. Код извлекаемый из оригинала и любые изменения в новом коде выделены жирным шрифтом. В дальнейшем в этой главе я буду придерживаться таких же соглашений.
В начало | предыдущая | следующая