PHP:
Refatoração

Como fazer:

Vamos pegar um trecho clássico de PHP e aplicar um pouco de mágica de refatoração.

Antes da refatoração, nosso código pode parecer assim:

function printOrderDetails($order) {
    foreach ($order as $item) {
        echo "Item: " . $item['name'];
        echo " - Preço: " . $item['price'];
        echo "<br>";
    }
    
    if (!empty($order)) {
        echo "Total: " . array_sum(array_column($order, 'price'));
    }
}

Mas podemos refatorar esse código para melhorar sua clareza e modularidade:

function printItem($item) {
    echo "Item: {$item['name']} - Preço: {$item['price']}<br>";
}

function calculateTotal($order) {
    return array_sum(array_column($order, 'price'));
}

function printOrderDetails(array $order) {
    array_walk($order, 'printItem');

    if (!empty($order)) {
        echo "Total: " . calculateTotal($order);
    }
}

Ao dividir a função printOrderDetails em funções menores, nosso código se torna mais legível e fácil de depurar.

Aprofundamento

A refatoração tem suas raízes na comunidade de programação Smalltalk do início dos anos 1990 e foi posteriormente popularizada pelo livro seminal de Martin Fowler “Refatoração: Melhorando o Design do Código Existente” (1999). Embora a refatoração possa ser aplicada a qualquer linguagem de programação, a natureza dinâmica do PHP permite alguns desafios e oportunidades únicos.

Alternativas à refatoração podem incluir reescrever o código do zero, o que geralmente é mais arriscado e consome mais tempo. No ecossistema PHP, ferramentas como PHPStan e Rector podem identificar automaticamente e realizar algumas operações de refatoração, respectivamente. Em termos de implementação, manter as refatorações pequenas e testar extensivamente com testes unitários são práticas chave para garantir uma refatoração bem-sucedida sem introduzir bugs.

Veja também