Java:
Рефакторинг

Как

Давайте рассмотрим простой Java класс, который кричит о рефакторинге из-за своей плохой организации и недостатка ясности.

public class Calculator {
    public int calc(int op1, int op2, String operation) {
        if (operation.equals("add")) {
            return op1 + op2;
        } else if (operation.equals("subtract")) {
            return op1 - op2;
        } // Другие операции...
    }
}

После рефакторинга у нас получается:

public class Calculator {
    public int add(int operand1, int operand2) {
        return operand1 + operand2;
    }

    public int subtract(int operand1, int operand2) {
        return operand1 - operand2;
    }

    // Другие операции...
}

Благодаря рефакторингу мы улучшили имена методов и параметры для читаемости и устранили необходимость в условном ветвлении внутри одного метода. Каждая операция теперь четко указывает свою цель.

Глубокое погружение

Рефакторинг берет свое начало в сообществе Smalltalk, с его акцентом на читаемость кода и объектно-ориентированное проектирование, но он действительно взлетел в мире Java в конце 90-х и начале 00-х годов, особенно после публикации фундаментальной книги Мартина Фаулера “Рефакторинг: Улучшение дизайна существующего кода”.

Существуют альтернативы рефакторингу, такие как переписывание кода с нуля. Однако рефакторинг часто предпочтителен, поскольку он включает в себя постепенные изменения, которые не нарушают функциональность приложения.

Детали реализации при рефакторинге в Java (или любом другом языке программирования) вращаются вокруг понимания “запахов кода” — индикаторов более глубоких проблем в коде. Некоторые запахи включают в себя длинные методы, большие классы, дублирующий код и чрезмерное использование примитивов. Применяя паттерны рефакторинга, например, Выделение метода, Перемещение метода или Замена временной переменной запросом, разработчики могут систематически решать эти проблемы, обеспечивая при этом функциональность кода в любое время.

Автоматизированные инструменты, такие как поддержка рефакторинга в IntelliJ IDEA или плагины для Eclipse, могут помочь в процессе, автоматизируя такие рефакторинги, как переименование переменных, методов и классов, выделение методов или переменных и перемещение методов или классов в разные пакеты или пространства имен.

См. также:

Каждый из этих ресурсов предоставляет либо основу для понимания принципов рефакторинга, либо инструменты, которые могут быть использованы для применения этих принципов на практике.