Question

Supposons que vous ayez hérité d'une base de code C # utilisant une classe avec 200 méthodes statiques pour fournir des fonctionnalités essentielles (telles que des recherches dans les bases de données). Parmi les nombreux cauchemars de cette classe, on utilise abondamment la notation hongroise (le mauvais genre).

Refacturez-vous les noms de variables pour supprimer la notation hongroise ou les laisseriez-vous seuls?

Si vous choisissez de modifier toutes les variables pour supprimer la notation hongroise, quelle serait votre méthode?

Était-ce utile?

La solution

Laissez-le tranquille. Votre temps est mieux utilisé.

Autres conseils

Refactor - Je trouve que la notation hongroise à cette échelle interfère vraiment avec la lisibilité naturelle du code, et que l’exercice est un bon moyen de se familiariser avec ce qu’il contient.

Toutefois, si d'autres membres de l'équipe connaissent la base de code, vous aurez besoin d'un consensus sur la refactorisation et si l'une des variables est exposée en dehors du projet, vous devrez les laisser tranquille.

Cliquez avec le bouton droit sur le nom de la variable, Refactor - > Renommer.

Certains compléments VS le font également, mais la méthode intégrée fonctionne bien pour moi.

Que ferais-je? En supposant que je dois juste maintenir le code et ne pas le réécrire de manière significative? Laissez-le tranquille. . Et quand je ferai ajouter du code, respectez le style existant, c'est-à-dire utilisez la notation hongroise laide (aussi sale que cela me fait sentir). / p>

Mais, hé, si vous avez vraiment un hankerin 'fer refactorin' , faites-le un peu à la fois. Chaque fois que vous travaillez dessus, passez dix minutes à renommer les variables. Rangement un peu. Après quelques mois, vous constaterez peut-être que c'est propre comme un sifflet ....

N'oubliez pas qu'il existe deux types de notation hongroise.

L'original Charles Simonyi HN, plus tard connu sous le nom de hongrois d'App et l'abomination ultérieure appelée Système hongrois après un peckerhead (terme technique), ont totalement mal interprété L'article original de Simonyi .

Malheureusement, le système HN a été propagé par Petzold et d’autres pour devenir l’avortement le plus dominant qu’il soit légitimement reconnu comme tel aujourd’hui.

Lisez le excellent article de Joel sur l'intention de la notation hongroise d'origine Apps et désolé pour ce qui a été perdu dans la précipitation.

Si vous avez obtenu le hongrois d'une application, vous voudrez probablement le conserver après avoir lu les articles originaux de Charles Simonyi et de Joel.

Si vous avez atterri dans une pile fumante de système hongrois?

Tous les paris sont ouverts!

Ouf! (dit en tenant le nez) (-:

si vous vous sentez chanceux et que vous voulez juste que le Hongrois s'en aille, isolez les préfixes hongrois utilisés et essayez de rechercher et de remplacer dans le fichier pour les remplacer par rien , puis effectuez un nettoyage. et reconstruire. Si le nombre d'erreurs est faible, corrigez-le. Si le nombre d'erreurs est énorme, revenez en arrière et divisez-le d'abord en classes logiques (par domaine), puis renommez-le individuellement (l'IDE vous aidera)

J'avais l'habitude de l'utiliser religieusement à l'époque de VB6, mais je me suis arrêté lorsque VB.NET est sorti parce que c'est ce que les nouvelles directives de VB disaient. Les autres développeurs ne l'ont pas fait. Nous avons donc beaucoup de vieux code avec. Lorsque je fais la maintenance du code, je supprime la notation des fonctions / méthodes / sous-touches que je touche. Je ne voudrais pas tout supprimer en même temps à moins que ne disposiez que de très bons tests unitaires et que vous puissiez les exécuter pour prouver que rien n'est cassé.

Combien allez-vous casser en faisant cela? C'est une question importante à vous poser. Si de nombreux autres éléments de code utilisent cette bibliothèque, vous pouvez simplement créer du travail pour des personnes (peut-être vous-même) en effectuant l'exercice de changement de nom.

Je le mettrais sur la liste des choses à faire lors de la refactorisation. Au moins, tout le monde s’attend à ce que vous cassiez la bibliothèque (temporairement).

Cela dit, je suis totalement frustré par les méthodes et les variables mal nommées, ce qui me permet de comprendre.

Je ne voudrais pas en faire un projet. J'utiliserais les outils de refactoring dans VS (en fait, j'utiliserais ceux de Resharper, mais les VS fonctionneraient parfaitement) et je corrigerais toutes les variables de la méthode que je devais modifier. Ou, si je devais faire des changements à plus grande échelle, je refactoriserais les noms de variables dans n'importe quelle méthode à laquelle on m'avait demandé de comprendre .

Si vous avez un besoin légitime de le supprimer et de le modifier, j'utiliserais soit les outils de refactoring intégrés, soit un outil similaire à Resharper.

Cependant, je suis d’accord avec Chris Conway sur un certain point de vue et je vous demande POURQUOI, oui, c’est ennuyeux, mais en même temps, la plupart du temps, le "si ce n’est pas cassé ne le règle pas il " La méthode est vraiment la meilleure voie à suivre!

Ne le changez que lorsque vous l'utilisez directement. Et assurez-vous de disposer d’un banc d’essai prêt à être utilisé pour vous assurer qu’il fonctionne toujours.

Je conviens que le meilleur moyen de supprimer progressivement la notation hongroise est de refactoriser le code au fur et à mesure que vous le modifiez. Le plus grand avantage de ce type de refactoring est que vous devriez écrire des tests unitaires autour du code que vous modifiez afin de disposer d'un filet de sécurité au lieu de vous croiser les doigts et d'espérer que les fonctionnalités existantes ne soient pas brisées. Une fois ces tests unitaires en place, vous êtes libre de modifier le code à votre guise.

Je dirais qu'un problème plus important est que vous avez une seule classe avec 200 (!) méthodes!

Si la classe dépend beaucoup / change beaucoup, il pourrait être intéressant de la refactoriser pour la rendre plus utilisable.

En cela, Resharper est un must absolu (vous pouvez utiliser les outils de refactoring intégrés, mais Resharper est bien meilleur).

Commencez par rechercher un groupe de méthodes associées, puis reformulez-les dans une classe cohésive. Effectuez une mise à jour pour vous conformer aux normes de code les plus récentes.

Compiler & amp; lancez votre suite de tests.

Vous avez de l'énergie pour plus? Extraire une autre classe.
Usé - pas de problème; reviens et fais un peu plus demain. En quelques jours, vous aurez vaincu la bête.

Je suis d'accord avec @Booji - faites-le manuellement, chaque routine lorsque vous consultez déjà le code pour une autre bonne raison. Ensuite, vous obtiendrez les plus courants et ne vous souciez pas du reste.

Je pensais poser une question similaire, mais dans mon cas, le code incriminé est le mien. J'ai une très vieille habitude d'utiliser "le mauvais genre". de hongrois de mon époque FoxPro (qui avait une frappe faible et une portée inhabituelle) - une habitude que je n’ai que récemment lancée.

C'est difficile - cela signifie accepter un style incohérent dans votre base de code. C’est seulement il ya une semaine que j’ai finalement dit à "vissez-le" et a commencé un nom de paramètre sans la lettre "p". La dissonance cognitive que j'ai initialement ressentie a cédé la place à un sentiment de liberté. Le monde n'a pas pris fin.

La façon dont je me suis attaqué à ce problème change d’une variable à la fois lorsque je les rencontre, puis effectue des modifications plus radicales lorsque vous revenez pour effectuer des modifications plus en profondeur. Si vous êtes un peu comme moi, la nomenclature différente de vos variables vous rendra fou de chauve-souris pendant un moment, mais vous vous y habituerez lentement. La clé est de le réduire un peu à la fois jusqu'à ce que vous ayez tout ce qu'il vous faut.

Sinon, vous pouvez annuler complètement vos variables et demander à chaque fonction de retourner 42.

Il me semble que le plus gros problème est la classe Objet divin de la méthode 200. Je suggérerais que refactoriser simplement pour supprimer la notation hongroise soit une activité à faible valeur et à haut risque en soi. À moins que de nombreux tests unitaires automatisés ne soient organisés autour de cette classe pour vous donner une certaine confiance dans votre refactoring, je pense que vous devriez le laisser bel et bien.

Je suppose qu’il est peu probable qu’un tel ensemble de tests existe, puisqu’un développeur qui suit les pratiques de TDD aurait (espérons-le) évité naturellement de construire un objet divin au départ - il serait très difficile d’écrire des tests complets.

Cependant, l’élimination de l’objet divin et la mise en place d’une base de test unitaire ont une valeur supérieure. Mon conseil serait de rechercher des opportunités de refactoriser la classe elle-même - peut-être lorsqu'un changement / une exigence professionnelle appropriée nécessiterait une modification de ce code (et donc, espérons-le, s'accompagnera de tests de régression système achetés et payés). Vous ne pourrez peut-être pas justifier l'effort de refactoriser tout cela en une fois, mais vous pouvez le faire pièce par pièce à mesure que l'occasion se présente et tester les changements. De cette manière, vous pouvez convertir lentement le code spaghetti en une base de code plus propre avec des tests unitaires complets, étape par étape.

Et vous pouvez éliminer le Hongrois au fur et à mesure, si vous le souhaitez.

Je suis en train de faire la même chose ici pour une extension d'application. Mon approche a consisté à utiliser les mappages VIM pour rechercher des préfixes de notation hongroise spécifiques, puis les supprimer et corriger les majuscules, le cas échéant.

Exemples (va dans 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~

Si vous voulez modifier le code uniquement pour le refactoriser, j’envisagerais sérieusement de me laisser seul, en particulier si vous prévoyez d’affecter les autres membres de votre équipe susceptibles de dépendre de ce code.

Si votre équipe accepte ce refactoring et investit votre temps à le faire (ce qui permettra peut-être de gagner du temps à l'avenir, si cela signifie que le code est plus lisible / maintenable), utilisez Visual Studio (ou tout autre logiciel de développement intégré). vous utilisez) pour vous aider à reformer le code.

Cependant, si un changement aussi important n’est pas un risque que votre équipe / votre patron est disposé à prendre, je suggérerais une approche peu orthodoxe à mi-parcours. Au lieu de faire tout votre refactoring en un seul balayage, pourquoi ne pas refactoriser des sections de code (plus précisément des fonctions) qui doivent être touchées lors de la maintenance normale? Au fil du temps, cette refactorisation lente apportera du code à un état plus propre. À ce stade, vous pourrez terminer le processus de refactorisation par un balayage final.

J'aime la notation hongroise. Je ne comprends pas pourquoi vous voulez vous en débarrasser.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top