Автоматизация сложных задач рефакторинга - PullRequest
2 голосов
/ 06 декабря 2011

У меня такая ситуация, что одни и те же повторяющиеся задачи рефакторинга должны выполняться для огромного числа методов в моем коде.Например, представьте интерфейс с 100 методами, каждый из которых имеет один или несколько параметров, а также возвращаемое значение.Для каждого из этих методов мне нужно перейти к реализации, изменить тип возвращаемого значения и добавить строку кода, которая преобразует старое возвращаемое значение в его новый тип для вызывающих методов интерфейса.

Есть ли способбыстро автоматизировать такие рефакторинги?Я даже подумал написать собственный сценарий для этого, но написание интеллектуального сценария заняло бы больше времени, чем выполнение вручную.

Инструмент, поддерживающий такую ​​задачу, может сэкономить много времени.

Ответы [ 5 ]

1 голос
/ 06 декабря 2011

Если ваша проблема в одном интерфейсе с 100 методами, то я согласен с другим постером: просто сделать это может показаться болезненным, но это ограниченное усилие, и вы можете сделать это очень скоро.

Если у вас постоянно возникает эта проблема, или у вас очень большая база кода (много, много интерфейсов, для которых вы хотите выполнить эту задачу), то вам нужен инструмент для реализации автоматических изменений: преобразование программы двигатель . Такой инструмент позволяет анализировать исходный код, создавать представление программы (абстрактное синтаксическое дерево) и позволяет применять «скриптовые» операции к дереву через процедурные интерфейсы и / или через шаблоны преобразования источника в источник.

OUr DMS Software Reengineering Toolkit - это такая система преобразования программ. Он имеет C # Front End , чтобы включить его приложение для кода C #. Настройка такого инструмента для сложной задачи не занимает несколько часов, поэтому он не полезен для «мелкомасштабных» изменений. Для крупномасштабных изменений такие инструменты могут сделать вещи просто не практичными вручную.

1 голос
/ 06 декабря 2011

Это хороший вопрос, но за то время, которое прошло с момента его публикации (не говоря уже о времени, потраченном на поиск ответа до публикации), вы могли бы внести изменения вручную.

Я знаюЯ знаю, это совершенно неудовлетворительно, но если вы думаете об этом как о форме посредничества и делаете это только раз в год, это не так уж и плохо.

0 голосов
/ 06 декабря 2011

изменить тип возвращаемого значения: изменив ... тип возвращаемого значения, при условии, что это не стандартный тип (...), и преобразователь может быть реализован с помощью TypeConverter.

Когда мне приходится выполнять такую ​​скучную задачу, я часто переключаю VS2010 и использую инструмент, позволяющий выполнять поиск и замену регулярных выражений. В вашем примере, возможно, измените «return xxx;» по 'var yyy = convert (xxx); вернуть yyy; '

(например, редактор Notepad ++ (бесплатно) уже предлагает довольно много возможностей изменить все в проекте (используйте с осторожностью))

0 голосов
/ 06 декабря 2011

Разве вы не можете создать новый интерфейс из вашего класса, а затем удалить те, которые вам не нужны!если это так просто !!

0 голосов
/ 06 декабря 2011

Resharper и CodeRush оба имеют функции, которые могут помочь с этим типом задачи.

Resharper изменение подписи функциональность, вероятно, самая близкаяматч.

...