Помогите назвать класс, который имеет единственный открытый метод Execute () - PullRequest
1 голос
/ 26 апреля 2010

Я разработал следующий класс, который должен работать как метод (обычно пользователь просто запускает Execute ()):

public abstract class ??? {
    protected bool hasFailed = false;
    protected bool hasRun = false;

    public bool HasFailed { get { return hasFailed; } }
    public bool HasRun { get { return hasRun; } }

    private void Restart() {
        hasFailed = false;
        hasRun = false;
    }

    public bool Execute() {
        ExecuteImplementation();
        bool returnValue = hasFailed;
        Restart();
        return returnValue;
    }

    protected abstract void ExecuteImplementation();        
}

Мой вопрос: как мне назвать этот класс? Runnable? Метод (звучит неловко)?

Ответы [ 10 ]

3 голосов
/ 26 апреля 2010

Название класса - это хороший дизайн. Вы должны знать, в каких случаях будет использоваться этот класс, какую ответственность он будет нести и в каких коллаборациях будет принимать участие этот класс. Именование класса без контекста может только навредить. Называть класс за шаблоном только потому, что шаблон использует сходные имена, еще хуже, потому что это может сбить с толку любого читателя, который знает что-то о шаблонах, что совершенно противоположно тому, чего пытаются достичь шаблоны - назовите общие решения / решения / проекты / и т.д .. Ваш класс может быть Runnable, Исполняемый файл, Метод, Процедура, Задание, Работник, RestartableExecutor, Команда, Блок, Закрытие, Функтор и практически все что угодно без дополнительной информации.

3 голосов
/ 26 апреля 2010

Возможности:

  • действие
  • Команда
  • работник
  • Метод

Мне лично нравится действие.

2 голосов
/ 26 апреля 2010

Для меня это выглядит как Task.

2 голосов
/ 26 апреля 2010

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

Например, если вы выполняете сканирование файлов и папок, вы можете назвать класс FileAndFolderScan.

FileAndFolderScan.Execute();
1 голос
/ 27 апреля 2010

Задача

Код клиента должен хорошо выглядеть при этом.

//create instance of Task implementation
Task myTask = TaskFactory.CreateTask();

//Execute the task
myTask.Execute()
1 голос
/ 26 апреля 2010

На моей работе мы какое-то время застряли на .NET 2.0 (делегаты до Action и Func), и я использовал группу перегруженных универсальных делегатов с такими же подписями, как Runner и Returner. Мне кажется, вы могли бы пойти с Runner и иметь довольно четкий класс с самоописанием.

Альтернативно, почему бы просто не пойти с чем-то вроде Executable или Executor?

1 голос
/ 26 апреля 2010

.NET Framework уже имеет класс, который делает это (на самом деле несколько). Их называют делегатами .

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

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

1 голос
/ 26 апреля 2010

Обычно шаблон Command использует классы с методом Execute(). Это более или менее то, что вы пытаетесь достичь? Я думаю, это достаточно близко для меня; Я бы назвал это Командой или Работником или чем-то подобным.

Знаете ли вы о BackgroundWorker ?

0 голосов
/ 28 июля 2011

Быстрый ответ: У вас уже есть несколько предложений, таких как «Задача», «Процесс», «Работа», даже «Команда».

Дополнительные комментарии: Любой объект имеет жизненный цикл, операцию «начало», обычно конструктор, операцию «завершение», обычно «удаление» или деструктор, и выполняет одну основную операцию, такую ​​как «Execute ()», но может быть больше .

В вашем коде конструктор или деструктор внутренне управляются вашим компилятором, но иногда делают некоторые другие вещи, такие как открытие и закрытие файлов.

Возможно, вы захотите узнать больше о шаблоне Command Design, поскольку, как уже упоминалось в предыдущих ответах, он подходит для вашего случая.

0 голосов
/ 26 апреля 2010

Вы можете назвать это Палач . :)

...