2010-11-12 102 views
0

我有一个要求,我有一组作业要从屏幕执行(每个作业可能需要几个小时才能执行),我需要制定一些规则来执行这些作业。它可以用图表来表示。哪种设计模式适合此工作流程要求?

  1. 每个职业都有一个序列号和作业应该在序列
  2. 然而,有一组可以在任何顺序执行的工作和他们每个人都可以有自己的路径来执行。例如一旦A和B完成,D,E,F可以按任意顺序运行,但是可以有一条规则,像G只能在D完成后才能运行,H只能在E完成之后运行。
  3. 如果其之前的任何并行作业成功,则可以运行一些作业。如果作业是A,B,C,D和A,则B,C可以按任意顺序运行,只有在A或B或C完成时才能运行D.
  4. 只有完成所有前面的并行作业,才能运行一些作业。在上面的例子中,如果A和B和C完成,可以运行规则D如果A和B和C完成
  5. 有一些检查点,这意味着一旦检查点作业完成,以前都不能重新运行,包括检查点作业。

不知怎的,我需要能够表达一个可以在运行时评估的工作条件。例如E =(A和B)或(C和D);这意味着如果A和B成功或者C和D成功,则作业E可以运行。

几乎总结了不同类型的规则,我的问题是,是否有我可以用来实现这个设计模式?理想情况下,我希望将此工作流保存在数据库中,并基于此验证是否允许作业运行。窗口工作流可能是一个矫枉过正的,我正在寻找更简单的解决方案,可能不是最好的,但需要更少的时间。使用

技术:ASP.NET 3.5,C#3.0,SQL Server 2008中

回答

0

我解决了这个问题,将这些作业依赖关系存储在树形格式的表格中,并使用递归函数对其进行评估。可能不是最好的,但它可以工作和配置。

0

玉以及我不认为你有实现使用简单,直接的设计模式,你有这么多的执政规律的要求。您可以使用多种设计模式的组合来达成良好的设计。

但是,看着你的要求,我认为你可以使用template pattern。这种设计模式将允许您定义程序框架 - 行为和顺序。但是,既然你有其中序列可以改变或可发生并行处理的其他一些规则 - 模板模式可用于覆盖算法步骤,通过子类或模板模式,让不同的行为可以用一个钩子来跳过某些步骤和诱导不同的行为。

我只是想大声这里,你将不得不仔细权衡您的要求和检查,如果这是你实现最好的设计模式。

0

每个职业都有一个序列号 和就业应 序列

这对我来说执行指示,你需要一个队列添加您的作业。我首先找到Priority Queue的实现,并采用它来了解队列中的所有其他作业,并根据该作业分配优先级。这将确保它们都按正确的顺序运行,具体取决于它们的“类型”。