2009-12-18 3 views
6

J'utilise Resharper pour le refactoring. Quel est ce type de fonctionnalité appelée lorsque vous avez le même code dans environ 5 événements différents qui sont appelés mais que vous voulez les remplacer par un appel de méthode? Et placez ce code dans cette méthode.Refactorisation du code dupliqué dans les méthodes

Tout est fait automatiquement.

Merci

Répondre

4
+2

comment puis-je obtenir tous dans la méthode à la fois? Le même code est trouvé dans plusieurs événements –

+1

Je ne pense pas que cela puisse être fait. Mais vous pouvez toujours l'atteindre facilement. Extrayez la méthode une fois, copiez et collez l'appel de méthode à partir de cette extraction dans les autres emplacements et renommez les paramètres si nécessaire. Ou, utilisez Resharper pour extraire une méthode à chaque fois que le code est dupliqué, puis supprimez toutes les méthodes, sauf une, et remplacez les appels par la méthode qui reste. – jason

+1

L'utilisation canonique de la méthode d'extraction consiste à extraire deux morceaux de code proche de la duplication chacun dans sa propre méthode; utiliser d'autres refactorings pour rendre les deux méthodes identiques; remplacez un appel à Method2 par un appel à Method1; effacez Method2. Bien sûr, lancez vos tests unitaires entre chaque refactoring. Répétez jusqu'à ce que toutes les duplications aient disparu. –

14

J'ai travaillé sur un plugin Resharper qui fait ce que vous demandez. Autrement dit, il analyse votre code, en recherchant les sections qui peuvent être remplacées par un appel de méthode existant. Une section peut être une méthode entière ou juste une partie d'une méthode. Quand il en trouve un, l'ampoule apparaît et propose de remplacer cette section par un appel à la méthode existante.

alt text http://landofjosh.com/wp-content/uploads/2009/08/identicalmethodsquickfix-cropped.png

Je l'appelle AgentRalph. À ce stade, il n'est pas prêt pour l'utilisation en production, mais j'ai fait beaucoup de progrès et j'espère faire une sortie bientôt.

+0

c'est très gentil. –

1

Voir notre C# CloneDR. Bien qu'il ne remplace pas le code redondant par des appels de fonction, il vous indique où ils se trouvent sur un très grand système et forme l'abstraction essentielle (corps de la procédure et paramètres). Le lien Web contient des exemples d'analyses de clones pour l'équivalent C# d'Hibernate (NHibernate).