Como você trata o código legado (e os dados)?
-
09-06-2019 - |
Pergunta
Atualmente, estou no processo de reestruturação do meu repositório Subversion local, adicionando alguns novos projetos e mesclando nele código legado e dados de alguns repositórios mais antigos.
Quando fiz isso no passado, geralmente coloquei o código legado em uma pasta "legacy" dedicada, para não "perturbar" a nova e "bem estruturada" árvore de código.No entanto, no espírito da refatoração, sinto que isso está um tanto errado.Em teoria, o código legado será refatorado ao longo do tempo e movido para seu novo local, mas na prática isso raramente acontece.
Como você trata seu código legado?Por mais que eu me sinta tentado a guardar pecados antigos na pasta "legado", para nunca mais olhar para ele, em algum nível espero que, ao forçá-lo a viver entre os habitantes mais "saudáveis" do repositório, talvez o legado código terá mais chances de melhorar algum dia?
(Sim, todos nós sabemos não deveríamos reescrever coisas, mas este é meu repositório "divertido", não meus projetos de negócios...)
Atualizar
Não estou preocupado com os aspectos técnicos de acompanhar as várias versões.Eu sei como usar tags e ramificações para isso.Este é mais um aspecto psicológico, pois prefiro ter uma estrutura "limpa" no repositório, o que torna a navegação muito mais fácil - para os humanos.
Solução
Todo código se torna 'legado' um dia, por que separá-lo?O controle de origem é por projeto/filial ou projeto/plataforma/filial e esse tipo de hierarquia.Quem se importa com quanto tempo está no dente?
Outras dicas
A marcação é uma operação muito barata no subversão.Marque seu código quando você começar a refatorar e em estágios regulares enquanto avança.Dessa forma, é fácil ainda acessar o código antigo (mas funcional) como referência para o seu código novo (mas quebrado).:-)
Aqui está sua análise psicológica gratuita:
O que você tem aqui é um desejo profundamente enraizado de corrigir seu código legado para que ele não seja mais legado.Quando você esconde isso, você está apenas reprimindo esse desejo, tentando evitá-lo porque é uma sensação desconfortável.Se você deixar isso aberto, uma de duas coisas acontecerá:isso acabará deixando você louco e você terá que se matar, ou (mais otimista), você será lembrado de cada parte bagunçada repetidamente até que finalmente desmorone e limpe tudo.
Não esconda a bagunça;limpe.Caso contrário, mais cedo ou mais tarde ele voltará para mordê-lo.
Depende do que você chama legado.Se ao dizer legado você realmente quer dizer 'código de algum aplicativo aposentado que é tão ruim que nunca mais o usaremos', ele deve ser separado do seu código atual.Se for algo do seu projeto atual, mas foi escrito por outras pessoas ou não está de acordo com seus padrões atuais, trate-o normalmente, mas sinalize-o para refatoração no futuro em seu rastreador de problemas.
Usar Definições Externas (svn: externos propriedade) para referenciar seu código legado como faria com um repositório de terceiros.
Então você pode separar seu trabalho de refatoração de seus projetos dependentes e (usando referências de revisão fixas, ou seja,-r1234) seja bem explícito sobre de qual revisão do código legado o projeto dependente depende.