ASPNET MVC: повторное использование последовательностей действий - PullRequest
0 голосов
/ 26 мая 2011

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

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

То, что я хотел бы сделать, это упаковать различные методы действия, которые включают в себя обход дерева и выбор узла в «подпрограмму», которую я мог бы «вызвать» из различных классов контроллеров, которые должны получить узел. Но я не могу придумать хороший способ сделать это в структуре ASPNET MVC. Предложения?

p.s. один подход был представлен здесь , но мне интересно посмотреть, есть ли другие.

1 Ответ

0 голосов
/ 26 мая 2011

Не видя никакого кода, то, что вы описываете как «упаковывание различных методов действия, которые включают в себя обход дерева», - это просто создание метода. Другими словами, вам не нужно искать набор методов действия, которые включают в себя обход дерева, а вызывать методы, которые используются этими методами действия.

Что означает «рефакторинг» методов действия, чтобы логика обрабатывалась в классах обслуживания, и создание метода, состоящего из интересующих вас действий.

Значит, ваши контроллеры будут выглядеть примерно так:

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();
    }
}
...