帮助命名具有名为Execute()的单个公共方法的类

时间:2010-04-26 02:13:36

标签: c# language-agnostic oop class-design

我设计了以下类,它应该像方法一样工作(通常用户只运行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();        
}

我的问题是:我应该如何命名这门课程?可运行?方法(听起来很尴尬)?

10 个答案:

答案 0 :(得分:3)

的可能性:

  • 动作
  • 命令
  • 工人
  • 方法

我个人喜欢行动。

答案 1 :(得分:3)

命名一个类就是一个好的设计。您必须知道此类将成为哪些用例,它将承担哪些责任以及此类将参与哪些协作。没有上下文的命名类只会造成伤害。仅仅因为模式使用相似名称而在模式之后命名类更糟糕,因为它可能会使任何对模式有所了解的读者感到困惑,这与模式试图实现的完全相反 - 命名常见的决策/解决方案/设计/等等。你的类可以是Runnable,Executable,Method,Procedure,Job,Worker,RestartableExecutor,Command,Block,Closure,Functor,几乎没有更多信息。

答案 2 :(得分:2)

我想问一个好问题就是你正在执行什么。然后你可能会知道如何命名它。

例如,如果您正在执行文件和文件夹扫描,则可以将类命名为FileAndFolderScan

FileAndFolderScan.Execute();

答案 3 :(得分:2)

对我来说,确实看起来像Task

答案 4 :(得分:1)

通常Command pattern使用带Execute()方法的类。这或多或少是你想要完成的事情吗?我想这对我来说足够接近了;我会把它称为命令或工人或类似的东西。

您知道BackgroundWorker吗?

答案 5 :(得分:1)

.NET Framework已经有一个实现此目的的类(实际上有几个)。他们被称为delegates

如果它真的做的不仅仅是执行一个方法 - 执行错误处理或那种事情 - 那么将它命名为它实际上做什么,而不是它是如何实现的。

如果你绝对来实现一个完全通用的抽象类,除了封装任意方法和某种成功/失败状态(为什么?)之外什么都不做,那么......任务,工作者,命令,指令,请求,活动等......选择上述任何一个,它们在这种情况下都意味着几乎相同的事情。

答案 6 :(得分:1)

在我的工作中,我们被困在.NET 2.0上一段时间(前ActionFunc代表)并且我一直在使用一堆重载的通用委托,这些委托具有相同的签名{{{ 1}}和Runner。在我看来,你可以选择Returner,并且有一个非常清晰的自描述课程。

或者,为什么不选择RunnerExecutable之类的内容?

答案 7 :(得分:1)

<强>任务

客户端代码看起来应该很好。

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

//Execute the task
myTask.Execute()

答案 8 :(得分:0)

您可以将其称为Executioner。 :)

答案 9 :(得分:0)

快速回答: 你已经有了一些建议,如“任务”,“过程”,“工作”,甚至“命令”。

补充评论 任何对象都有生命周期,“开始”操作,通常是构造函数,“完成”操作,通常是“Dispose”或析构函数,并且只读取像“Execute()”这样的单个主操作,但是可以有更多

在您的代码中,构造函数或析构函数由编译器在内部管理,但有时会执行其他一些操作,如打开和关闭文件。

您可能想要了解有关命令设计模式的更多信息,如前面的答案所述,它似乎适合您的情况。