Переместить код в другой класс, сохраняя API - PullRequest
2 голосов
/ 20 сентября 2019

У меня есть класс, который состоит из слишком большого количества строк кода.Поэтому я пытаюсь преобразовать его в более мелкие функциональные блоки, не нарушая общедоступный API.

Предположим, у нас есть этот код

class MyClass
{
    public static void DoSomething() { ... }
}

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

Конечно, я могу пометить тело метода, "извлекать метод" (из R #)и наконец отметьте старый метод Obsolete.Однако на некоторых сотнях методов это довольно раздражает.

Я ищу что-то похожее на Resharpers Refactor -> Move, но там, где существующий код вообще не затрагивается, чтобы не сломать клиентов моей сборки.

Так что вконец мне нужно это:

class NewClass
{
    public static void DoSomething() { ... }
}
class LegacyClass
{
    public static void DoSomething() { NewClass.DoSomething(); }
}

1 Ответ

0 голосов
/ 20 сентября 2019

Я бы сделал так:
1. используйте Resharper для создания интерфейса из исходного класса.
2. разделите исходный класс на новые классы.
3. повернитеинтерфейс в оболочку исходного класса.
4. используйте макрос клавиатуры в Notepad ++, чтобы превратить:

void DoSomething();

в

 public void DoSomething() { NewClass.DoSomething(); }

Это не будет работать для статических методовхотя.

ОТО, возможно, вы слишком обдумываете проблему.«Сотни» звучат как много, но при 10 секундах на функцию, это может занять около часа или около того, чтобы сделать это вручную.Вы можете легко потратить больше, чем попытаться автоматизировать его или найти идеальное решение.

...