Como disciplinar seu código com refatoração (inclui exemplos de PHP)
Publicados: 2021-06-22Como muitas outras coisas na vida, nosso código também precisa de alguma disciplina. Tenho certeza de que nenhum desenvolvedor no mundo deseja escrever código sujo. No entanto, o código impuro ainda existe. Pode surgir por vários motivos - pode ser devido à pressão empresarial, falta de documentação, falta de interação entre os membros da equipe ou incompetência do desenvolvedor. As devidas ações devem ser tomadas para tornar o código mais limpo e evitar problemas que possam surgir no futuro por causa disso. Felizmente, podemos resolver esses problemas com uma técnica disciplinada para reestruturar o código, chamada de Refatoração .
Refatorar é uma técnica para melhorar a estrutura interna do código-fonte do programa existente e manter seu comportamento externo. É um procedimento passo a passo para melhorar o código, o que, de outra forma, nos custará muito tempo e esforço.

Desvantagens do Código Imundo
Expandir o tamanho do código-fonte adicionando novos programas a ele sem refatorar por um longo tempo torna o código confuso e sujo. Isso torna a manutenção e o desenvolvimento do projeto muito difíceis. O código impuro vem com toneladas de desvantagens:
- Aumenta o custo de manutenção do projeto.
- Adicionar um novo recurso leva muito tempo e às vezes torna-se impossível adicioná-lo.
- Isso retarda a introdução de novas pessoas no projeto.
- Ele contém código duplicado.
- Não passa em todos os testes.
Existem muitas outras desvantagens, mas esses problemas custam muito dinheiro e tempo para a organização.
Vantagens do Código Limpo
Um código limpo e disciplinado tem suas próprias vantagens:
- Não contém código duplicado.
- Ele passa em todos os testes.
- Torna o código mais legível e fácil de compreender.
- Isso torna o código mais fácil de manter e menos caro.
As vantagens de um código limpo são muitas. O processo de transformar um código sujo e confuso em um código limpo mais sustentável é chamado de processo de Refatoração.
Processo de Refatoração
A refatoração deve ser feita como uma série de pequenas mudanças, cada uma das quais melhora ligeiramente o código existente e permite que o programa continue a ser executado sem quebrá-lo. Após a refatoração, o código deve ficar mais limpo do que antes. Se permanecer impuro, não há sentido em refatorar. É apenas uma perda de tempo e esforço. Nenhum novo código deve ser adicionado durante a refatoração para criar uma nova funcionalidade. Ele deve passar em todos os testes após a refatoração.
Quando refatorar
A refatoração deve ser realizada quando:
- Adicionando código duplicado ao projeto. Porque o código duplicado é difícil de manter e as alterações em um local podem exigir atualizações em muitos outros locais.
- Adicionando um recurso. A refatoração torna mais fácil adicionar novas funcionalidades.
- Ao consertar um bug, você deve refatorar porque isso fará com que o bug seja descoberto automaticamente.
- A revisão do código é o último estágio da refatoração do código antes que as mudanças sejam implantadas na produção.
Lidando com o cheiro de código
Os problemas no código às vezes são chamados de odores de código. Esses são os problemas tratados durante a refatoração. Eles são mais fáceis de encontrar e consertar.
Por exemplo:
- Métodos e classes grandes que são muito difíceis de trabalhar.
- Uso incompleto ou incorreto do conceito de programação orientada a objetos.
- Código que torna difícil adicionar quaisquer alterações.
- Código duplicado e obsoleto no projeto.
- Código altamente acoplado.
Técnicas de Refatoração
As técnicas de refatoração são as etapas executadas para refatorar o código. Algumas das técnicas de refatoração são:
1. O método de extração
// Problema
function printInvoice() { $this->printHeader(); // Print details. print("name: " . $this->name); print("amount " . $this->getPrice()); }// Solução

function printInvoice() { $this->printBanner(); $this->printDetails($this->getPrice()); } function printDetails($price) { print("name: " . $this->name); print("amount " . $outstanding); }Se você tiver um fragmento de código que pode ser agrupado, adicione um novo método para essa parte do código e substitua o código antigo. Isso torna o código mais isolado e remove a duplicação.
2. Extrair Variável
// Problema
if (($student->getMarksinMath() > 60) && ($student->getMarksInPhysics() > 60) && ($student->getMarksinChemistry() > 60) && $this->pass) { // do something }// Solução
$mathResult = $student->getMarksinMath() > 60; $physicsResult = $student->getMarksinPhysics() > 60; $chemistryResult = $student->getMarksinChemistry() > 60; $hasPassed = $this->pass; if ($mathResult && $physicsResult && $chemistryResult && $hasPassed) { // do something }Para grandes expressões como a exibida no problema, que é muito difícil de entender, diferentes variáveis podem ser criadas para cada expressão. Isso torna o código mais legível. Mas esse método deve ser aplicado com cautela. No entanto, ele tem suas próprias desvantagens. O código será executado mesmo se a condição for falsa, o que não é o caso do problema.
3. O Método Inline
// Problema
function printResult() { return ($this->getResult()) ? “Pass” : “Fail”; } function getResult() { return $this->totalMarks > 300; }// Solução
function getRating() { return ($this->totalMarks > 300) ? “Pass” : “Fail”; }Quando o corpo do método for mais óbvio, use esta técnica. Substitua o método pelo conteúdo do método e exclua o método. Ele minimiza o número de métodos indesejados.
4. Temp Inline
// Problema
$mathMark = $student->getMathResult(); return $mathMark > 60;// Solução
return $student->getMathResult() > 60;Se houver uma variável temporária indesejada que apenas contém o resultado da expressão, remova a variável com a própria expressão. Isso ajuda a se livrar de variáveis desnecessárias.
5. Substitua a matriz por objeto
// Problema
$row = []; $row[0] = "Virat Kohli"; $row[1] = 70;// Solução
$row = new Player(); $row->setName("Virat Kohli"); $row->setNumberofCentury(70);Se houver uma matriz com vários tipos de dados, substitua-a por um objeto. Porque os campos de uma classe são mais fáceis de documentar e manter do que matrizes com vários tipos de dados.
6. Método Parametrizado
// Problema
function fivePercentRaise() { } function tenPercentRaise() { }// Solução
function raise(percent) { }Se vários métodos executarem ações semelhantes nos dados, substitua todos os métodos por um método e transmita os dados como argumento (s). Ele remove métodos duplicados e redundantes.
7. Separe a consulta do modificador
// Problema
function getInterest() { $this->interestAmount = $this->principal * 10 / 100; return $this->interestAmount; }// Solução
function setInterest() { $this->interestAmount = $this->principal * 10 / 100; } function getInterest() { return $this->interestAmount; }Se um método está retornando valor e alterando o objeto, divida os dois métodos. Um para modificação e outro para retornar o resultado. Ele remove a chance de modificação não intencional de um objeto.
