Не видя никакого кода, то, что вы описываете как «упаковывание различных методов действия, которые включают в себя обход дерева», - это просто создание метода. Другими словами, вам не нужно искать набор методов действия, которые включают в себя обход дерева, а вызывать методы, которые используются этими методами действия.
Что означает «рефакторинг» методов действия, чтобы логика обрабатывалась в классах обслуживания, и создание метода, состоящего из интересующих вас действий.
Значит, ваши контроллеры будут выглядеть примерно так:
public class ControllerA {
public ActionResult DoSomething() {
serviceA.DoSomething();
}
}
public class ControllerB {
public ActionResult DoSomethingElse() {
serviceB.DoSomethingElse();
}
}
Вы определите эти службы с необходимой логикой и теперь сможете создать класс SharedService, который вызывает нужные вам методы.
public class SharedService {
public void DoBoth() {
serviceA.DoSomething();
serviceB.DoSomethingElse();
}
}