我想问一下设计"工作流程合并".我有几个彼此不太相似的工作流程.但是,有时候我想要将它们组合起来进行修改.让我给你举个例子 :
工作流程1 - 旅行
A1(打包) - > A2(离开房子) - > A3(赶上公交车) - > A4 ......
工作流程2 - 每日植物浇水
B1(打开水) - > B2(离开房子) - > B3(给植物浇水) - > B4(进入房子) - > B5(关掉水)
星期天,我想去旅行,我也需要给植物浇水.所以我想创建像A1 - > B1到B5 - > A2 ......的东西.我也想有可能告诉我的朋友完成浇水,这将是A1 - > B1到B2 - > C1(将任务交给朋友) - > A3 ...正如你所看到的,流程很简单 - 它没有叉子和连接,我不需要这样的功能.我所需要的只是创建一个线性的命令列表,可以轻松地将它们合并在一起.所有代码片段目前都是Java方法(我想让它们像原子流一样).
我的方法的主要目标应该是避免一遍又一遍地输入相同的代码.流程可能有数百个步骤.我想做出这样的声明执行流程的,但不是运行A2和A3,B2执行对B6和继续进行.
我有两个主要问题:
注意:请说明我的问题有哪些不清楚?
我个人觉得这个需求不需要借助任何特定的框架就可以实现。您可以按如下方式设计应用程序:
TaskPerformer :具有名为 PerformTask 的方法的接口。代表要执行的任务。
BagPackTask :实现 TaskPerformer 的具体类。还定义了performTask方法,其中包含打包包的代码。
WaterPlantsTask :另一个实现 TaskPerformer 的具体类。还定义了包含给植物浇水的代码的performTask方法。同样,每个任务都有一个类来实现 Taskperformer 并使用 PerformTask 方法定义任务的行为。
工作流:一个类,将用于执行两个或多个任务,并允许您混合和匹配现有任务。该类将包含一个 TaskPerformer 列表,该类的构造函数将有一个 List 参数来请求执行任务。该类将包含一个executeWorkflow 方法,该方法将迭代List 并调用列表中每个元素的performTask 方法。换句话说,此类可用于通过使用其executeWorkflow 方法来执行实例化期间传递给其构造函数的所有任务。请务必注意,在列表中插入元素的顺序就是任务的执行顺序。
使用这种方法,您无需使用任何 if-else 条件来确定要执行的任务。您可以根据需要在任意数量的 Workflow 实例中重用 TaskPerformer 实现。你会得到一个超级干净的设计。如果您需要任何说明,请告诉我,因为我觉得这个设计应该可以解决您的问题。在接受任何答案之前澄清所有疑问是个好主意:)