2009-12-18 2 views
6

Sto usando Resharper per il refactoring. Che cos'è questo tipo di funzionalità chiamato quando si ha lo stesso codice in circa 5 diversi eventi chiamati ma si desidera sostituirli con una chiamata al metodo? E posiziona quel codice in quel metodo.Refactoring codice duplicato in metodi

Tutto fatto automaticamente.

Grazie

risposta

4
+2

come ottenerli tutti nel metodo immediatamente? Lo stesso codice si trova in più eventi –

+1

Non penso che si possa fare. Ma puoi ancora ottenerlo facilmente. Estrai il metodo una volta, copia e incolla la chiamata al metodo da quella estrazione nelle altre posizioni e rinomina i parametri secondo necessità. In alternativa, utilizzare Resharper per estrarre un metodo per ogni volta che il codice viene duplicato e quindi eliminare tutti i metodi tranne uno, e sostituire le chiamate al metodo che rimane. – jason

+1

L'uso canonico del metodo Extract consiste nell'estrarre due blocchi di codice quasi duplicato ciascuno nel proprio metodo; utilizzare altri refactoring per rendere identici i due metodi; sostituire una chiamata a Method2 con una chiamata a Method1; elimina Method2. Naturalmente, esegui i test unitari tra ogni refactoring. Ripeti fino a quando non sono finite tutte le duplicazioni. –

14

Ho lavorato a un plug-in di Resharper che fa ciò che stai chiedendo. Cioè, esegue la scansione del codice, cercando le sezioni che possono essere sostituite da una chiamata di metodo esistente. Una sezione può essere un intero metodo o solo una parte di un metodo. Quando ne trova uno, la lampadina si apre e offre di sostituire detta sezione con una chiamata al metodo esistente.

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

mi chiamano AgentRalph. A questo punto non è pronto per l'uso in produzione, ma ho fatto molti progressi e spero di fare presto un rilascio.

+0

questo è un uomo molto carino. –

1

Vedi il nostro C# CloneDR. Sebbene non sostituisca il codice ridondante con le chiamate di funzione, indica dove si trovano su un sistema molto grande e forma l'astrazione essenziale (corpo della procedura e parametri). Il collegamento Web contiene analisi clone di esempio per l'equivalente C# di Hibernate (NHibernate).