Workflow 如何将控制权让给调用方法
假设我有一个任务对象,带有Workflow 如何将控制权让给调用方法,workflow,inversion-of-control,Workflow,Inversion Of Control,假设我有一个任务对象,带有Execute方法。此方法有一到几个步骤,每个步骤都要求用户单击“继续”按钮,例如,当调用Execute时,任务通知其容器(本例中为Windows窗体)显示介绍性消息,并等待按钮单击,然后继续执行步骤2,通知用户正在发生什么并执行某些工作 我不希望控制器必须知道任务中的步骤,或者隐式地,例如通过调用Execute(steps.ShowIntro),Execute(steps.PerformTask)等,或者显式地,使用多个执行方法,例如ExecuteIntro(),Ex
Execute
方法。此方法有一到几个步骤,每个步骤都要求用户单击“继续”按钮,例如,当调用Execute
时,任务通知其容器(本例中为Windows窗体)显示介绍性消息,并等待按钮单击,然后继续执行步骤2,通知用户正在发生什么并执行某些工作
我不希望控制器必须知道任务中的步骤,或者隐式地,例如通过调用
Execute(steps.ShowIntro)
,Execute(steps.PerformTask)
等,或者显式地,使用多个执行方法,例如ExecuteIntro()
,ExecuteTask()
,等等
当前,我正在使用阶段枚举来确定单击“继续”按钮时要执行的操作:
show phase 1 intro.
set current_phase = PhaseOne.
on continue_button click
switch current_phase
case PhaseOne:
show phase 1 'Now doing:' message.
execute phase 1 task.
show phase 2 intro.
set phase to PhaseTwo.
case PhaseTwo:
show phase 2 'Now doing:' message.
execute phase 2 task.
show phase 3 intro.
set phase to PhaseThree.
为什么不简单地使用Execute方法实现与步骤一样多的类,并将这些类的实例放入队列中呢 通过按“Continue”,您将使用Execute获取另一个类实例并调用它
class Task
method execute()
foreach task in queue execute task
method addSubTask( task )
add task to queue
class ShowIntroSubTask extends Task
class ExecuteIntroSubTask extends Task
MykOLA的回答听起来不错,但是如果您想选择另一种方法,请考虑传递<代码>确认继续> <代码>回调,其中<代码>执行<代码>可以根据需要使用(例如在步骤转换)。如果你想保持事物的抽象性,只需将其称为
NextStep
,并将语义留给容器。通常的回答是,这意味着对于任何远程复杂的事物,都需要大量的样板文件。但是,如果IoC系统没有CPS的翻译器,这就是你所能做的一切。@Mykola,你的回答仍然让我问我如何让调用方法控制。对我来说,在循环中执行子任务与按顺序执行它们没有什么不同。只要顶层任务执行子任务,我的问题就是“我不希望控制器必须知道任务中的步骤”。控制器不会意识到这些步骤。它将意识到“某些”抽象任务。还是我理解你的方式不对?@ProfK——这个想法是它们是匿名的工作块,它们的数量(甚至它们的性质)可以在运行时由外部决定,而不是在编译时在控制器的代码中僵化。你能添加伪代码来描述控制器吗,容器和您的问题?我已经用伪代码描述了我现在的位置。