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——这个想法是它们是匿名的工作块,它们的数量(甚至它们的性质)可以在运行时由外部决定,而不是在编译时在控制器的代码中僵化。你能添加伪代码来描述控制器吗,容器和您的问题?我已经用伪代码描述了我现在的位置。