workflow - 如何将控制权交给调用方法

标签 workflow inversion-of-control

假设我有一个带有 Execute 方法的任务对象。此方法具有一到多个步骤,每个步骤都需要用户单击“继续”按钮,例如当调用 Execute 时,任务会告诉其容器(本例中为 Windows 窗体)显示介绍性消息,并等待按钮单击,然后继续执行步骤 2,通知用户正在执行的操作正在发生并执行一些工作。

我不希望 Controller 必须知道任务中的步骤,无论是隐式的,例如通过调用 Execute(Steps.ShowIntro)Execute(Steps.PerformTask) 等或显式调用多个 Execute 方法,例如ExecuteIntro()ExecuteTask()

目前,我正在使用 Phase 枚举来确定单击“Continue”按钮时要执行的操作:

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 方法实现与步骤一样多的类,并将这些类的实例放入队列中。

通过按“继续”,您将使用 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

关于workflow - 如何将控制权交给调用方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/685896/

相关文章:

git - TeamCity 将功能分支推送到 master 分支

python - 给我一些很棒的 Web2py 提示和技巧,让你更有效率

architecture - 领域驱动设计中的层

java - 基于运行时提供的字符串查找要使用哪个接口(interface)实现的优雅解决方案

c# - 未注册类型的 SimpleInjector 强制 Lifestyle.Transient

node.js - 反转 : how to bind Model<Document> to container object

javascript - 使用 javascript 获取工作流程的文件名 - Alfresco

c# - 如何从工作流对话框中删除标题中的问号?

workflow - 在 Alfresco Community 4.0.e 中部署新工作流定义的最直接方法是什么?

c# - 在 C# 中创建一个小型 IoC 容器