Глава 6
[править]
Значительная часть моих рефакторингов заключается в составлении методов, правильным образом оформляющих код. Почти всегда проб¬лемы возникают из-за слишком длинных методов, часто содержащих массу информации, погребенной под сложной логикой, которую они обычно в себе заключают. Основным типом рефакторинга здесь служит «Выделение метода» (Extract Method, 124), в результате которого фрагмент кода превращается в отдельный метод. «Встраивание метода» (Inline Method, 131), по существу, является противоположной про¬цедурой: вызов метода заменяется при этом кодом, содержащимся в теле. «Встраивание метода» (Inline Method, 131) требуется мне после проведения нескольких выделений, когда я вижу, что какие-то из по¬лученных методов больше не выполняют свою долю работы или требу¬ется реорганизовать способ разделения кода на методы.
Самая большая проблема «Выделения метода» (Extract Method, 124) связана с обработкой локальных переменных и, прежде всего, с нали¬чием временных переменных. Работая над методом, я люблю с помощью «Замены временной переменной вызовом метода» (Replace Temp with Query, 133) избавиться от возможно большего количества временных переменных. Если временная переменная используется для разных целей, я сначала применяю «Расщепление временной переменной» (Split Temporary Variable, 141), чтобы облегчить последующую ее замену.
Однако иногда временные переменные оказываются слишком сложны¬ми для замены. Тогда мне требуется «Замена метода объектом метода»(Replace Method with Method Object, 148). Это позволяет разложить да¬же самый запутанный метод, но ценой введения нового класса для вы¬полнения задачи.
С параметрами меньше проблем, чем с временными переменными, при условии, что им не присваиваются значения. В противном случае требуется выполнить «Удаление присваиваний параметрам» (Remove Assignments to Parameters, 144).
Когда метод разложен, мне значительно легче понять, как он работа¬ет. Иногда обнаруживается возможность улучшения алгоритма, по¬зволяющая сделать его более понятным. Тогда я применяю «Замещение алгоритма» (Substitute Algorithm, 151).
6.Составление методов[править]
- 6. Составление методов 123
- Выделение метода (Extract Method) 124
- Встраивание метода (Inline Method) 131
- Встраивание временной переменной (Inline Temp) 132
- Замена временной переменной вызовом метода (Replace Temp with Query) 133
- Введение поясняющей переменной (Introduce Explaining Variable) 137
- Расщепление временной переменной (Split Temporary Variable) 141
- Удаление присваиваний параметрам (Remove Assignments to Parameters) 144
- Замена метода объектом методов (Replace Method with Method Object). . 148
- Замещение алгоритма (Substitute Algorithm) 151