哪种设计模式适合此工作流程要求?

时间:2010-11-12 17:31:15

标签: .net design-patterns architecture workflow

我有一个要求,即我在屏幕上执行一组作业(每个作业可能需要数小时才能执行),我需要制定一些规则来执行这些作业。它可以用图表表示。

  1. 每个作业都有一个序列号,作业应该按顺序执行
  2. 但是,有一组作业可以按任何顺序运行,并且每个作业都可以有自己的路径。例如,一旦A和B完成,D,E,F可以按任何顺序运行,但是可以有一个规则,比如G只能在D完成后运行,H只能在E完成之后运行。< / LI>
  3. 如果其中任何一个并行作业成功,则可以运行某些作业。如果作业是A,B,C,D和A,B,C可以按任何顺序运行,D只有在A或B或C完成时才能运行。
  4. 只有在完成所有前面的并行作业后才能运行某些作业。例如,在上面的例子中,如果A和B和C完成,可以运行像D这样的规则
  5. 有一些检查点,这意味着一旦检查点作业完成,之前的任何一个都不能重新运行,包括检查点作业。
  6. 不知怎的,我需要能够表达一个可以在运行时评估的作业的条件。类似E =(A和B)OR(C和D);这意味着如果A和B成功或者C和D成功,则作业E可以运行。

    几乎总结了不同类型的规则,我的问题是,我可以使用一种设计模式来实现这一点吗?理想情况下,我希望在数据库中保留此工作流,并根据该工作流验证是否允许作业运行。 Windows工作流程对此可能有点过头了,我正在寻找可能不是最好的简单解决方案,但花费的时间更少。

    要使用的技术:ASP.NET 3.5,C#3.0,SQL Server 2008

5 个答案:

答案 0 :(得分:0)

听起来你可能想看一下Workflow Foundation,在WF4中有一个WorkflowApplication类,它允许你轻松地将工作流嵌入到GUI应用程序中。

查看此页面中的“在WPF中托管工作流程”和“在Windows窗体中托管工作流程”部分:http://www.packtpub.com/article/hosting-workflow-applications-microsoft-windows-workflow-foundation-40

答案 1 :(得分:0)

http://code.djangoproject.com/wiki/GoFlow/sampleprocess这对我有帮助。这是强大的架构

答案 2 :(得分:0)

好吧,我不认为你已经使用简单直接的设计模式实现了许多管理规则的要求。您可以使用多种设计模式的组合来获得良好的设计。

但是,考虑到您的要求,我认为您可以使用template pattern。此设计模式将允许您定义程序框架 - 行为和顺序。但是,由于您有一些其他规则可以更改序列或可以进行并行处理 - 模板模式可以用于覆盖算法步骤以允许使用子类或模板模式的不同行为可以与钩子一起使用以跳过某些步骤并诱导不同的行为。

我只是在这里大声思考,你必须仔细权衡你的要求,并检查这是否是你实施的最佳设计模式。

答案 3 :(得分:0)

  

每个作业都有一个序列号   并且应该执行工作   序列

这对我来说表明您需要队列来添加作业。我首先找到Priority Queue的实现,并采用它来了解队列中的所有其他作业,并在此基础上分配优先级。这将确保它们都按照正确的顺序运行,具体取决于它们的“类型”。

答案 4 :(得分:0)

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