2009-12-18 3 views
6

Я использую Resharper для рефакторинга. Что такое этот тип функции, называемый, когда у вас есть один и тот же код примерно в 5 разных событиях, но вы хотите заменить их вызовом метода? И поместите этот код в этот метод.Рефакторинг дублирования кода в методы

Все сделано автоматически.

Благодаря

ответ

4
+2

Как я могу получить все из них в метод сразу? Тот же код найден в нескольких событиях –

+1

Я не думаю, что это можно сделать. Но вы все равно можете достичь этого легко. Извлеките метод один раз, скопируйте и вставьте вызов метода из этого извлечения в другие места и при необходимости переименуйте параметры. Или используйте Resharper для извлечения одного метода для каждого раза, когда код дублируется, а затем удалите все, кроме одного из методов, и замените вызовы оставшемуся методу. – jason

+1

Каноническое использование метода извлечения извлекает два куска почти дублированного кода каждый в свой собственный метод; используйте другие рефакторинги, чтобы сделать два метода одинаковыми; замените вызов Method2 вызовом метода 1; удалите метод2. Конечно, запустите свои модульные тесты между каждым рефакторингом. Повторяйте до тех пор, пока все дубликаты не исчезнут. –

14

Я работаю над плагином Resharper, который делает то, что вы просите. То есть, он сканирует ваш код, ища разделы, которые можно заменить существующим вызовом метода. Раздел может быть целым методом или просто частью метода. Когда он находит, лампочка всплывает и предлагает заменить упомянутый раздел вызовом существующего метода.

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

Я называю это AgentRalph. На данный момент он не готов к производству, но я добился большого прогресса и надеюсь скоро выпустить релиз.

+0

Это очень хороший человек. –

1

См. Наш C# CloneDR. Хотя он не заменяет избыточный код вызовами функций, он сообщает вам, где они находятся в очень большой системе, и формирует существенную абстракцию (тело процедуры и параметры). В веб-ссылке приведен пример анализа клонов для эквивалента C# для спящего режима (NHibernate).

Смежные вопросы