Я хочу использовать наиболее интуитивно понятный шаблон асинхронного проектирования и нуждаюсь в функциях и правильном наименовании - PullRequest
3 голосов
/ 03 ноября 2011

Мне нужно создать базовый класс с абстрактной функцией, которая может быть асинхронной.Обычно я не беспокоюсь о правильном назначении имен и функций, но мой класс является частью SDK, поэтому мне нужно, чтобы он был как можно более понятным и максимально приближенным к стандарту сообщества.

ИтакВ качестве примера рассмотрим случай, когда эта функция переопределяется так, что она получает данные от некоторого сервера.Конкретный класс может выглядеть примерно так:

//asynchronous
class TalkToServer : TaskBase {

   void override StartExecute(){
       Server s = new Server();
       s.HandleResponse += new ReponseEvent(GotResponse);
       s.AskTheServer();
   }

   void GotResponse(Server s){
       //do stuff with response
       base.NotifyTaskComplete();
   }
}

//this could also happen (synchronous)
class Example2: TaskBase {

   void override StartExecute(){
       //do stuff
       base.NotifyTaskComplete();
   }
}

Так что единственные функции, которые есть в моем базовом классе для работы с асинхронными процедурами:

  • StartExecute () //, вызываемые приготов начать выполнение задачи
  • NotifyTaskComplete () // вызывается конкретным классом, чтобы уведомить слушателей о том, что задача выполнена

Итак, мои вопросы

  1. Эти имена в порядке или есть лучшие имена?Я думал, что мог бы использовать «Commit» для NotifyTaskComplete, потому что это на самом деле транзакционный и базовый класс также содержит функцию Rollback.Может быть, StartExecute должен быть просто Execute (поскольку задача не всегда будет асинхронной, как показано в примере 2)
  2. Есть ли какие-либо другие функции, которые мне нужны?Я как-то испортил этот шаблон дизайна?Я видел примеры, когда люди используют асинхронный объект, но я думаю, что он делает его менее интуитивным в этом случае.Я хочу сосредоточиться на идее выполнения задачи, а не на идее, что она может иметь асинхронные функции.

1 Ответ

0 голосов
/ 03 ноября 2011

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

event EventHandler<StartedEventArgs> Started;
event EventHandler<CompletedEventArgs> Completed;
...