6

我想问一下关于设计“工作流合并”的问题。我有几个彼此不太相似的工作流程。但是,有时我想将它们组合起来,稍微修改一下。让我给你举个例子 :

工作流程 1 - 旅行

A1(收拾行李)-> A2(离开家)-> A3(赶公共汽车)-> A4 ...

工作流程 2 - 每日植物浇水

B1(打开水)-> B2(离开房子)-> B3(给植物浇水)-> B4(进入房子)-> B5(关闭水)

星期天,我想去旅行,我也需要给植物浇水。所以我想创建类似A1 -> B1 to B5 -> A2...的东西。我还希望有可能告诉我的朋友完成浇水,这将是A1 -> B1 到 B2 -> C1(将任务传递给朋友)-> A3 ...如您所见,流程很简单——里面没有分叉和连接,我不需要这样的功能。我所需要的只是创建一个线性命令列表,并可以轻松地将它们合并在一起。目前,所有代码片段都是 Java 方法(我想让它们像原子流一样)。

我的方法的主要目标应该是避免一遍又一遍地输入相同的代码。流程可能有数百个步骤。我想做一个类似Execute flow A 的语句,但不是运行 A2 和 A3,而是执行 B2 到 B6 并继续 A

我有两个主要问题:

  • 是否有任何框架已经支持这一点?如果有,对我的目的来说是不是太复杂了?
  • 如果不是,那么实施此类事情的最佳方法是什么?

注意:您能否具体说明我的问题有什么不清楚的地方?

4

4 回答 4

1

我个人觉得这个需求可以在不使用任何特定框架的情况下实现。您可以按如下方式设计应用程序:

  1. TaskPerformer :具有名为 performTask 的方法的接口。表示要执行的任务。

  2. BagPackTask :实现TaskPerformer 的具体类。还定义了包含打包代码的 performTask 方法。

  3. WaterPlantsTask :另一个实现 TaskPerformer 的具体类。还定义了包含浇灌植物代码的 performTask 方法。同样,每个任务都有一个类来实现 Taskperformer 并使用 performTask 方法定义任务的行为。

  4. Workflow :用于执行两个或更多任务的类,允许您混合和匹配现有任务。该类将包含一个 TaskPerformer 列表,并且该类的构造函数将具有一个 List 参数来请求任务执行。该类将包含一个 executeWorkflow 方法,该方法将遍历 List 并调用列表中每个元素的 performTask 方法。换句话说,该类可用于执行在实例化期间通过其 executeWorkflow 方法传递给其构造函数的所有任务。需要注意的是,您在列表中插入元素的顺序就是执行任务的顺序。

使用这种方法,您无需使用任何 if-else 条件来确定要执行的任务。您可以根据需要在多少个 Workflow 实例中重用您的 TaskPerformer 实现。你会得到一个超级干净的设计。如果您需要任何说明,请告诉我,因为我认为这种设计应该可以解决您的问题。在接受任何答案之前澄清你所有的疑问是个好主意:)

于 2012-10-11T19:32:05.253 回答
1

...或实施命令模式。没有任何框架应该很容易。

于 2012-10-12T09:05:28.737 回答
0

Spring Batch的启动和运行非常简单,并允许您提交以您选择的任何顺序运行任务的作业。我建议作为起点,看看它是否满足您的需求。对于您的情况,我建议使用内存数据库(如 HSQLDB)运行它,以避免设置开销。您始终可以将作业结果记录在日志文件中。

可能最成熟的企业工作流引擎是JBPM,但这对于您需要做的事情来说似乎有点重量级。

于 2012-10-11T12:50:24.290 回答
0

看看OSWorkflow,它非常好,轻量级,并为您提供所有开箱即用的 FSM 机器。

于 2012-10-11T21:41:49.327 回答