API глаголы для прерываемой операции - PullRequest
1 голос
/ 07 июня 2010

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

Два кажутся ясными: Pause и Cancel. Это оставляет начало и возобновление операций. Я мог бы включить и Start и Resume. Недостатком является либо требование потребителя API проверять состояние перед запуском / возобновлением операции для вызова правильного метода, либо создание псевдонимов методов друг для друга. Я думаю, что одной из возможностей является использование либо Start или Resume, но я не знаю, какой из них является наиболее подходящим.

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

Редактировать: Наиболее похожий случай, который я нашел до сих пор, из библиотеки Workflow. WorkflowInstance имеет методы:

  • Прервать
  • Начало
  • Приостановка
  • Резюме
  • Прекратить

Ответы [ 3 ]

0 голосов
/ 07 июня 2010

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

public class Task
{
    public TaskController Start()
    {
        TaskController controller = new TaskController(this);

        ... // start the task

        return controller;
    }
}

public class TaskController
{
    private Task task;

    internal TaskController(Task task)
    {
        this.task = task;
    }

    public void Pause() { ... }
    public void Resume() { ... }
    public void Cancel() { ... }
}

На самом деле, это зависит от того, что вы делаете, относительно того, подходит ли это или нет (например, этот подход - возможно - позволит вам порождать несколько экземпляровзадача выполняется параллельно; я понятия не имею, если это уместно).

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

0 голосов
/ 07 июня 2010

Интерфейс очень похож на интерфейс службы Windows. ServiceController класс имеет Start / Stop / Pause / Continue для своих методов. Я мог видеть объединение методов Start / Continue в один, скажем Run, но тогда вам придется обрабатывать разницу внутри. Возможно, вы захотите подумать о том, как «сбросить» службу из состояния «Приостановлено». Если бы у вас был только Run, то вам нужно было бы сделать Stop / Run. Запуск может автоматически сбросить состояние, устраняя необходимость в этом случае. Я бы рассмотрел варианты использования и разработал его с точки зрения нормального пути через них.

0 голосов
/ 07 июня 2010

«Выполнить» может захватывать как «Пуск», так и «Возобновить» - или, возможно, «Перейти»?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...