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