Antes da publicação do livro de Martin Fowler "Refatoração: aprimorando o design do código existente", costumávamos chamar grandes mudanças no código "rearchitecture" e pequenas alterações "cleanup". Na IMO, as técnicas de refatoração são todas de senso comum / coisas óbvias que estamos fazendo desde sempre.
Você acha que a refatoração sempre foi algo novo? Talvez apenas uma maneira de induzir o gerenciamento a alocar tempo para a limpeza do código?
design
refactoring
terminology
Chuck Stephanski
fonte
fonte
Respostas:
A refatoração é mais antiga que as colinas, então não, não é novidade.
E a refatoração não está limpando. Bem, pode ser, mas não se limita à limpeza.
Está ajustando a arquitetura do seu aplicativo (em grandes ou pequenas escalas) enquanto preserva o comportamento.
Isso significa que, embora parte de seu aplicativo possa estar perfeitamente limpa e bem ontem, o novo recurso de hoje exige o ajuste dessa parte para acomodar o novo recurso.
Você não deseja interromper a funcionalidade existente, portanto, ajusta a estrutura do seu aplicativo enquanto preserva o comportamento - o que é refatoração.
Dito isto, não importa que alterações sejam feitas no código, deve-se sempre executar seus testes ... apenas por precaução.
fonte
É apenas arrumar o código. Essencialmente, os programadores (especialmente Martin Fowler) notaram que tendiam a executar as mesmas tarefas cada vez que organizavam seu código. Eles definiram e rotularam os métodos de arrumação e problemas de código associados e pronto! A refatoração nasceu.
É o mesmo com os padrões de design - as pessoas notaram que tendiam a usar as mesmas abordagens para problemas específicos repetidas vezes. Eles rotularam e definiram as abordagens e agora parece que você não é um programador real, a menos que você use apenas a mesma dúzia de padrões no código.
Não há mágica para refatorar; é apenas um novo conjunto de jargões para descrever uma prática antiga.
fonte
Fazemos três coisas separadas em nossa empresa, com tempo alocado para as três:
Exemplo: dividindo um método feio e ilegível de 100 linhas, que faz quatro coisas em quatro métodos reutilizáveis, 25 linhas cada.
Exemplo: removendo o código comentado depois de garantir que esse código não seja mais necessário.
Exemplo: adicionar
Culture.Invariant
emstring.Format
(ou outra cultura, que é mais apropriado).Portanto, no meu caso, refatorar é algo muito diferente de limpeza . Ao fazer a limpeza, eu não tenho para executar testes de unidade novamente: se o código funcionou antes, ele vai trabalhar depois da limpeza. Em outras palavras, não é porque removi uma linha vazia ou adicionei um comentário que o código deixará de funcionar. Por outro lado, quando refato partes complicadas de um código antigo, posso cometer alguns erros; portanto, devo executar testes de unidade após a refatoração.
fonte
A refatoração adiciona conhecimento ao seu código. Se você souber que algo está nomeado incorretamente, dê um nome melhor. Se você sabe que algo pode ser feito melhor, você o transforma em algo melhor.
São muitos os passos - pequenos e grandes - que esperam resultar em um programa melhor.
fonte
Concordo com "refatorar é uma palavra chique para limpar seu código", mas não com "apenas". As pessoas usam palavras sofisticadas por um motivo: às vezes porque querem parecer inteligentes, e às vezes porque transmitem um significado maior ou mais preciso, e a refatoração do IMHO (mesmo que ocasionalmente mal utilizada) geralmente se refere a este último.
"Limpar" pode significar qualquer coisa, desde "reformatar um pouco" até "reescrever grandes pedaços".
"Refatoração" significa especificamente algo como "pequenas alterações incrementais no código, projetadas para manter a mesma funcionalidade, enquanto a transforma em um design melhor". E há várias práticas recomendadas para o tipo de coisa que você faz: algumas são ad-hoc, mas existem princípios gerais, como usar testes de unidade, extrair parte de funções em novas funções ou classes, etc., que as pessoas podem e devem aprender .
Você diz "apenas induza o gerenciamento a alocar tempo para a limpeza do código". Mas se dizer "refatoração" transmite corretamente o conceito de que agora um investimento constante em clareza pagará dividendos em eficiência no futuro, isso não é um "truque", é uma comunicação clara e eficaz.
fonte
Refatorar é codificar como Normalização é para dados relacionais. É um processo de abstrair conceitos em representações mais limpas, mais claras e mais eficientes de seu papel no aplicativo.
fonte
Depende de como você entende a refatoração de termos. Para a maioria das pessoas, esse é um processo de melhorar a estrutura sem alterar o comportamento. Se você concorda, sim, isso foi feito muito antes do lançamento deste livro. Eu sei, porque estava (entre muitas outras coisas) renomeando classes, extraindo classes e métodos antes de o livro ser escrito. Eu não estava chamando isso de refatoração, mas em essência eu estava fazendo exatamente a mesma coisa.
Para mim, refatoração pessoal é o que as pessoas chamam de "refatoração automática de código", ou seja, suporte a várias técnicas de refatoração dentro de um IDE. Esta é uma melhoria real para o que eu estava fazendo antes (o que realmente foi muito doloroso). Posso realizar uma alteração em uma classe e não me preocupar com como isso afetará o restante do software. Eu acho que Martin formalizou as técnicas de refatoração até o ponto em que poderia ser representado como algoritmo e, portanto, implementado em vários IDEs por aí.
Portanto, se você entende a refatoração como um processo, isso não é novidade. Se você vê isso como automação, sim, é uma enorme melhoria. Tente renomear algumas classes principais (literalmente, não através das opções de refatoração do seu IDE) em um projeto razoavelmente grande para ver o porquê :)
fonte
A refatoração é realmente "limpeza" do código, mas também reestrutura o código. Na minha equipe, a refatoração é geralmente a última. Quando temos um caso de "refatoração", alocamos tempo para reestruturar nosso código, por exemplo, para alinhá-lo com uma nova arquitetura ou modelo de informação ou para torná-lo mais eficiente.
A "limpeza" do código é algo que fazemos continuamente, sem tempo especialmente alocado para isso. Para mim, "limpeza" geralmente é renomear, limpar comentários, etc.
fonte
Eu diria que não.
Pode haver limpeza no processo de refatoração, mas não é a essência.
A limpeza vem com a suposição de que o código anterior não está limpo. Na realidade, os desenvolvedores refatoram seu código até o código original já está limpo.
O DRY é um dos principais impulsionadores da refatoração.
Ao adicionar novos códigos a uma base de códigos existente, a refatoração é feita naturalmente devido ao princípio DRY.
Just my 0.02
fonte
Limpar seu código é como arrumar sua casa, refatorar é como derrubar um muro e possivelmente colocá-lo em outro lugar
fonte
Quando alguém limpa sua casa, você não consegue encontrar nada, porque o objetivo é deixar as coisas limpas e fora do caminho. A refatoração criaria e rotularia salas, armários, armários, prateleiras, caixas, etc. Ele ainda mantém a maioria das coisas (você ainda pode fazer um sanduíche de queijo grelhado na cozinha e comê-lo na sala de estar), mas deve fazê-lo mais fácil de encontrar e possivelmente ter locais eficientes para colocar coisas novas.
fonte
O termo 'refatoração' é elegantemente emprestado da álgebra. Significa simplificar os termos para produzir o mesmo resultado. Não apenas elegante, era revolucionário - exigia uma abordagem finita e rígida ao seu código, em um nível que surpreendeu muitos. E, portanto, o próprio termo foi significativo e útil.
fonte
Não. A refatoração está melhorando a estrutura sem alterar o comportamento. A refatoração no sentido estrito implica uma boa disciplina de teste. Isso não é necessariamente necessário quando você "limpa as coisas".
fonte
Os dois se sobrepõem um pouco nas bordas, mas para mim é a diferença entre limpar a casa e reformar a casa. A limpeza, para mim, não implica mudanças estruturais, enquanto a refatoração implica.
fonte
"Refatoração" é realmente a mesma coisa que "rearchitecture", mas com uma conotação mais forte de "nenhuma funcionalidade muda". Também é mais claro em termos do objetivo da re-arquitetura, que geralmente é "fatorar" o código comum em pedaços reutilizáveis.
fonte