我在这里努力争取一种模式。我有很多需要运行的任务,但如果以前没有运行,只需要运行一次。现在的所有内容都由if / then,booleans和hashtable处理。还有一些具有相同效果的嵌套子句(if / then,boolean)所以它们的父if / then,boolean在最后才设置为true。
在.NET中,是否存在某种代码模式或类,使其更简单/更清晰/更少代码,或者我是否过度思考它,这正是需要完成的方式?
<子> P.S。随意添加更好的标签到这篇文章,我不知道要添加什么,以使其更具描述性,如果有一个术语
答案 0 :(得分:6)
我不知道您的任务是如何编码的,但似乎它们可以封装在commands中,然后将其放入队列或其他一些数据结构中。一旦它们出列,就会检查它们的逻辑。如果他们需要运行,则执行它们,并且它们不会被放回队列中。如果他们的逻辑说他们不应该运行,他们只是被放回队列中以便以后运行。
您的界面将是:
public interface ITaskSink {
void AddTask(ICommandTask task);
}
public interface ICommandTask {
bool ShouldRun();
void Run(ITaskSink sink);
}
任务也可以将其他任务添加到数据结构中(因此Run
将ITaskSink
作为参数),涵盖您的子任务创建要求。任务甚至可以将自己添加回接收器,从而无需ShouldRun
方法并简化任务处理器类。
答案 1 :(得分:5)
如果您使用的是.NET 4.0,那么Lazy<T>
generic可能是您所描述内容的解决方案,因为它最多只评估一次值。
我不确定我是否完全理解您的用例,但是您无法将Lazy
嵌套在一起以完成嵌套子问题。
答案 2 :(得分:2)
我不是确切地确定你在谈论什么,但复杂链式逻辑的一个有用模式是rules engine。它们非常易于编码,并且可以由简单的真值表驱动,这些真值表可以编译到代码中或作为数据存储。
答案 3 :(得分:2)
创建一个私有静态变量,创建一个只读属性来检查私有变量是否为null,如果变量为null,则实例化/初始化并返回私有变量值。在您的实现代码中引用属性,而不是私有变量。