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
- Livro de Refatoração de Martin Fowler: https://martinfowler.com/books/refactoring.html
- PHPStan, uma ferramenta de análise estática PHP: https://phpstan.org/
- Rector, uma ferramenta para refatoração automática de código PHP: https://getrector.org/
- Testes unitários em PHP com PHPUnit: https://phpunit.de/