Pergunta

Digamos que você tenha herdado uma # base de código C que usa uma classe com 200 métodos estáticos para fornecer funcionalidade do núcleo (como pesquisas de banco de dados). Dos muitos pesadelos em que a classe, não há uso abundante de notação húngara (o tipo mau).

Você refatorar os nomes das variáveis ??para remover a notação húngara, ou se você deixá-los sozinhos?

Se você optou por mudar todas as variáveis ??para remover notação húngara, o que seria o seu método?

Foi útil?

Solução

Apenas deixá-lo sozinho. Existem melhores usos de seu tempo.

Outras dicas

Refactor - Acho notação húngara nessa escala realmente interfere com a legibilidade natural do código, eo exercício é uma boa maneira de se familiarizar com o que está lá

.

No entanto, se há outros membros da equipe que conhecem a base de código seria necessário consenso sobre a refatoração, e se qualquer uma das variáveis ??são expostas fora do projeto um, então você vai ter que deixá-los sozinhos.

Botão direito do mouse sobre o nome da variável, Refactor -.> Rename

Existem VS add-ins que fazem isso bem, mas o built-in método bem funciona para mim.

O que eu faria? Supondo que eu só tenho que manter o código e não reescrevê-lo de forma significativa? Deixe-o bem sozinho. E quando eu do adicionar código, ir com o estilo existente, ou seja, o uso que a notação feio Húngaro (tão sujo quanto isso me faz sentir.)

Mas, hey, se você realmente tem um hankerin fer refactorin' em seguida, basta fazer um pouco de cada vez. Toda vez que você trabalha nele passar dez minutos renomear variáveis. Arrumando as coisas um pouco. Depois de alguns meses você pode descobrir que é limpo como um assobio ....

Não se esqueça que existem dois tipos de Hungarian Notation.

O original Charles Simonyi HN, mais tarde conhecido como húngara do App e da abominação mais tarde chamado Sistema húngara depois de algum Peckerhead (é um termo técnico) totalmente mal interpretado papel original de Simonyi .

Infelizmente, Sistema HN foi propagada por Petzold e outros para se tornar o aborto mais dominante que é justamente reconhecido como hoje.

excelente artigo de Leia Joel sobre a intenção do Apps originais Hungarian Notation e ser muito pelo que se perdeu na corrida.

Se o que você tem é Hungarian da App você provavelmente vai querer mantê-lo depois de ler tanto o artigo Charles Simonyi original e o artigo Joel.

Se você aterrou em uma pilha fumegante de Sistema Húngaro?

Todas as apostas estão fora!

Ufa! (Disse, mantendo nariz) (-:

Se você estiver com sorte e quer apenas o húngaro para ir embora, isolar os prefixos húngaros que são usados ??e tentar uma pesquisa e substituição em arquivo para substituí-los com nada , em seguida, fazer uma limpeza e reconstruir. Se o número de erros é pequena, apenas corrigi-lo. Se o número de erros é enorme, voltar e dividi-lo em lógica (por domínio) as classes primeiro, em seguida, renomeie individualmente (o IDE irá ajudar)

Eu costumava usá-lo religiosamente nos dias VB6, mas parou quando VB.NET saiu porque é isso que as novas diretrizes VB disse. Outros desenvolvedores não o fez. Então, nós temos um monte de código antigo com ele. Quando eu faço manutenção no código que eu remover a notação do funções / métodos / sub eu toque. Eu não iria removê-lo de uma só vez menos você tem realmente bons testes de unidade para tudo e pode executá-los para provar que nada está quebrado.

Quanto é que você vai quebrar, fazendo isso? Essa é uma pergunta importante perguntar-se. Se há um monte de outros pedaços de código que uso essa biblioteca, então você só poderia ser a criação de trabalho para a gente (talvez você) passando pelo exercício renomeando.

Eu colocá-lo na lista de coisas para fazer quando refatoração. Pelo menos, em seguida, todos esperam que você estar a violar a biblioteca (temporariamente).

Dito isso, eu totalmente ficar frustrado com métodos e variáveis ??mal nomeadas, para que eu possa relacionar.

Eu não faria um projeto fora dele. Eu usaria as ferramentas de refatoração em VS (na verdade, eu uso, mas o trabalho de VS de ReSharper muito bem) e corrigir todas as variáveis ??em qualquer método que foi chamado para modificar. Ou se eu tivesse que fazer alterações de maior escala, eu refatorar os nomes de variáveis ??em qualquer método que foi chamado para entender .

Se você tem uma necessidade legítima de remover e mudar eu iria usar tanto o construído em ferramentas de refatoração, ou algo como ReSharper.

No entanto, eu concordo com Chris Conway a um certo ponto de vista e pedir-lhe por que, sim, é chato, mas ao mesmo tempo, uma grande parte do tempo a "se aint't quebrou correção done't-lo "método é realmente o melhor caminho a percorrer!

Apenas mudá-lo quando você usá-lo diretamente. E certifique-se que você tem um testbench pronto para aplicar para garantir que ele ainda funciona.

Eu concordo que a melhor maneira de eliminar gradualmente notação húngara é código de refatoração como você modificá-lo. O maior benefício de fazer esse tipo de refatoração é que você deve escrever testes de unidade em torno do código que você está modificando para que você tenha uma rede de segurança em vez de cruzar os dedos e esperar que você não quebrar a funcionalidade existente. Depois de ter estes testes de unidade no lugar, você está livre para alterar o código para o conteúdo do seu coração.

Eu diria que um problema maior é que você tem uma classe única com 200 (!) Métodos!

Se este é um muito dependia / muita classe alterado em seguida, pode valer a pena refatoração para torná-lo mais utilizável.

Neste, ReSharper é uma necessidade absoluta (você pode usar o construída em refatoração coisas, mas ReSharper é muito melhor).

Comece procurando um grupo de métodos relacionados, e depois refatorar estes para fora em uma pequena classe coesa agradável. Atualização para se conformar com as suas mais recentes padrões de código.

Compilar e executar o seu conjunto de testes.

tem energia para mais? Extrato de outra classe.
Desgastado - nenhum problema; voltar e fazer mais algumas amanhã. Em poucos dias você vai ter conquistado a besta.

Eu concordo com @Booji - fazê-lo manualmente, em uma base per-rotina quando você já está visitando o código para alguma outra razão. Então, você vai obter a maioria dos mais comuns fora do caminho, e que se preocupa com o resto.

Eu estava pensando em fazer uma pergunta semelhante, só que no meu caso, o código incorreto é a minha própria. Eu tenho um hábito muito antigo de usar "o tipo mau" de húngaro dos meus FoxPro dias (que tinha tipagem fraca e escopo incomum) - um hábito que eu tenho chutado apenas recentemente.

É difícil - isso significa aceitar um estilo inconsistente em sua base de código. Foi apenas há uma semana eu finalmente disse "dane-se" e começou um nome de parâmetro sem a letra "p". A dissonância cognitiva I sentiu inicialmente, deu lugar a uma sensação de liberdade. O mundo não chegou ao fim.

A maneira que eu tenho ido sobre este problema está mudando uma variável de cada vez que eu cruzar com eles, em seguida, realizar mudanças mais radicais quando você voltar a fazer mudanças mais aprofundadas. Se você for como eu, o diferente nomenclatura das suas variáveis ??irá conduzir você bat-shiat louco por um tempo, mas você vai lentamente se acostumar com isso. A chave é desbastar-lo um pouco de cada vez até que você tenha tudo para onde ele precisa ser.

Como alternativa, você poderia abandonar suas variáveis ??completamente e apenas tenha todas as funções de retorno 42.

Parece-me que o problema maior é que 200 método Deus Objeto . Eu sugiro que refatoração apenas para remover a notação húngara é um baixo valor, atividade de alto risco em si mesmo. A menos que haja um conjunto abundante de testes de unidade automatizados em torno dessa classe para dar-lhe alguma confiança em sua refatoração, eu acho que você deve deixá-lo bem e verdadeiramente sozinho.

Eu acho que é improvável que tal conjunto de testes existe, porque um desenvolvedor seguindo as práticas de TDD que (espero) têm naturalmente evitado a construção de um objeto deus em primeiro lugar - seria muito difícil escrever testes abrangentes para.

A eliminação do objeto deus e obter uma base de teste de unidade no lugar é de maior valor, no entanto. Meu conselho seria para procurar oportunidades para refatorar o classe em si - talvez quando um requisito de negócios / mudança adequada vem que implica uma alteração a esse código (e, portanto, esperamos que vem com algum sistema & Teste de Regressão comprado e pago). Você pode não ser capaz de justificar o esforço de refatoração a coisa toda de uma só vez, mas você pode fazê-lo peça por peça como a oportunidade vem junto, e test-drive as alterações. Desta forma, você pode lentamente converter o código espaguete em uma base de código mais limpo com testes unitários abrangentes, pouco a pouco.

E você pode eliminar o húngaro como você vai, se quiser.

Na verdade, estou fazendo a mesma coisa aqui para uma extensão de aplicativo. A minha abordagem tem sido a de mapeamentos de uso VIM para procurar prefixos específicos notação húngara e, em seguida, excluí-los e correção capitalização conforme o caso.

Exemplos (vai em vimrc):

"" Hungarian notation conversion helpers
"" get rid of str prefixes and fix caps e.g. strName -> name
map ,bs /\Wstr[A-Z]^Ml3x~
map ,bi /\Wint[A-Z]^Ml3x~
"" little more complex to clean up m_p type class variables
map ,bm /\Wm_p\?[A-Z]^M:.s/\(\W\)m_p\?/\1_/^M/\W_[A-Z]^Mll~
map ,bp /\Wp[A-Z]^Mlx~

Se você é código vai quebrar apenas por uma questão de refatoração, eu consideraria seriamente deixando i sozinho, especialmente, se você estiver indo para afetar outras pessoas em sua equipe que pode ser, dependendo do que o código.

Se a sua equipe é OK com este refactoring, e investir seu tempo em fazer isso (que pode ser uma economia de tempo no futuro, se isso significa que o código é mais legível / passível de manutenção), use o Visual Studio (ou qualquer IDE você estiver usando) para ajudar a refatorar o código.

No entanto, se uma grande mudança como este não é um risco a sua equipe / patrão está disposto a assumir, gostaria de sugerir uma abordagem pouco ortodoxa, a meio caminho. Em vez de fazer todo o seu refatoração em uma única varredura, por que não seções refactor de código (mais especificamente, funções) que precisam ser tocado durante a manutenção normal? Ao longo do tempo, este refactoring lento trará o código-se a um estado mais limpo, em que ponto você pode terminar o processo de refatoração com uma varredura final.

Eu amo notação húngara. Não entendo por que você iria querer se livrar dele.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top