运行一次代码:超越布尔值?

Tod*_*ain 2 .net design-patterns

我在这里努力争取一种模式.我有很多需要运行的任务,但如果以前没有运行,只需要运行一次.现在的所有内容都由if/then,booleans和hashtable处理.还有相同效果的嵌套子元素(if/then,boolean)所以它们的父if/then,boolean直到最后都没有设置为true.

在.NET中,是否存在某种代码模式或类,使其更简单/更清晰/更少代码,或者我是否过度思考它,这正是需要完成的方式?

PS随意添加更好的标签到这篇文章,我不知道要添加什么,使它更具描述性,如果有一个术语在那里

Jor*_*dão 6

我不知道您的任务是如何编码的,但似乎它们可以封装在命令中,然后将其放入队列或其他一些数据结构中.一旦它们出列,就会检查它们的逻辑.如果他们需要运行,则执行它们,并且它们不会被放回队列中.如果他们的逻辑说他们不应该运行,他们只是被放回队列中以便以后运行.

您的界面将是这样的:

public interface ITaskSink {
  void AddTask(ICommandTask task);
}

public interface ICommandTask {
  bool ShouldRun();
  void Run(ITaskSink sink);
}
Run Code Online (Sandbox Code Playgroud)

任务还可以将其他任务添加到数据结构(因此Run需要ITaskSink作为参数),涵盖您的子任务创建要求.任务甚至可以将自己添加回接收器,从而避免了对ShouldRun方法的需求并简化了任务处理器类.


Mar*_*off 5

如果您使用的是.NET 4.0,那么Lazy<T>泛型可能是您所描述内容的解决方案,因为它最多只评估一次它的值.

我不确定我是否完全理解你的用例,但是没有理由你不能将它们嵌套Lazy在一起来完成嵌套的子问题.