如何控制调用方法

时间:2009-03-26 13:54:33

标签: workflow inversion-of-control

假设我有一个Task对象,使用Execute方法。该方法具有一到几个步骤,每个步骤都要求用户点击“继续”按钮,例如,当调用Execute时,任务告诉它的容器(在这种情况下为Windows窗体)显示介绍性消息,并等待按钮单击,然后继续执行步骤2,通知用户正在发生的事情和做一些工作。

我不希望控制器必须通过例如隐式地了解任务中的步骤。使用多个Execute方法调用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.

2 个答案:

答案 0 :(得分:3)

为什么不简单地使用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

答案 1 :(得分:0)

Mykola的回答听起来不错,但是如果您想要替代方案,请考虑传入ConfirmContinuation回调,Execute可以根据需要使用(例如,在步骤转换时)。如果你想保持抽象的东西,只需称它为NextStep,并将语义留给容器。