我设计了以下类,它应该像方法一样工作(通常用户只运行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();
}
我的问题是:我应该如何命名这门课程?可运行?方法(听起来很尴尬)?
答案 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上一段时间(前Action
和Func
代表)并且我一直在使用一堆重载的通用委托,这些委托具有相同的签名{{{ 1}}和Runner
。在我看来,你可以选择Returner
,并且有一个非常清晰的自描述课程。
或者,为什么不选择Runner
或Executable
之类的内容?
答案 7 :(得分:1)
<强>任务强>
客户端代码看起来应该很好。
//create instance of Task implementation
Task myTask = TaskFactory.CreateTask();
//Execute the task
myTask.Execute()
答案 8 :(得分:0)
您可以将其称为Executioner。 :)
答案 9 :(得分:0)
快速回答: 你已经有了一些建议,如“任务”,“过程”,“工作”,甚至“命令”。
补充评论 任何对象都有生命周期,“开始”操作,通常是构造函数,“完成”操作,通常是“Dispose”或析构函数,并且只读取像“Execute()”这样的单个主操作,但是可以有更多
在您的代码中,构造函数或析构函数由编译器在内部管理,但有时会执行其他一些操作,如打开和关闭文件。
您可能想要了解有关命令设计模式的更多信息,如前面的答案所述,它似乎适合您的情况。