Design patterns 编写流程图/问题向导的最具扩展性的方法?

Design patterns 编写流程图/问题向导的最具扩展性的方法?,design-patterns,wizard,flowchart,Design Patterns,Wizard,Flowchart,我被要求更新一个现有的“向导”,它向用户呈现一系列线性问题。我的任务是通过参考客户端提供的流程图来更新此向导。流程图与当前流程有很大差异。鉴于目前所有内容都是用问题编号和有效答案硬编码的,因此很难对所需的更改进行排序。 这让我想知道人们会用什么样的技术来模拟流程图/问答向导。我见过关于使用有限状态机的引用,但这似乎并不适合。我正在寻找一种技术,可以方便地移动、插入和删除现有问题,而无需对硬编码的参考文献进行排序。我曾考虑过使用一个通过CSV加载的数组,但不确定随着问题列表的增加,该数组是否易于维

我被要求更新一个现有的“向导”,它向用户呈现一系列线性问题。我的任务是通过参考客户端提供的流程图来更新此向导。流程图与当前流程有很大差异。鉴于目前所有内容都是用问题编号和有效答案硬编码的,因此很难对所需的更改进行排序。
这让我想知道人们会用什么样的技术来模拟流程图/问答向导。我见过关于使用有限状态机的引用,但这似乎并不适合。我正在寻找一种技术,可以方便地移动、插入和删除现有问题,而无需对硬编码的参考文献进行排序。我曾考虑过使用一个通过CSV加载的数组,但不确定随着问题列表的增加,该数组是否易于维护。
请注意,挂起的请求还允许根据会话流在任何时候跳入和跳出向导。 为了避免“问题过于宽泛”的回答,我正在寻找一种专门为这种用途而创建的特定模式或技术,而不是一个可能性列表。
谢谢

为什么有限状态机不适合?请参见中的旋转栅门示例

查看它们的“状态转换表”,您可以很容易地将列标题视为
IQuestion
接口的属性:

  • 当前状态:当前
    IQuestion
  • 输入:
    IQuestion.Answer
  • 下一个状态:
    IQuestion.NextIQuestion
  • 输出:无论它对您的系统做什么
您得到的是一个内置路由逻辑的
IQuestion
s图(可以是各种类型:multiplechicequestion、DateQuestion等)

您似乎担心问题的重用/重新排序,您可以通过一些抽象来处理这些问题。可能会使
IQuestion
不关心路由关注点,只具有
QuestionText
PossibleAnswers
等属性,然后有一个
IQuestionNode
可以存储实际的图形/路由关注点。它可以处理对
IQuestion
的评估,并根据固定的顺序或通过检查当前问题的选定答案提供指向下一个问题的指针

然后,您真正需要做的就是定义一个状态/事件表(有关更多信息,请参阅wiki解释),该表可以由您的系统转换为此图


您可能还想看看根据不同需求加载不同问卷图表的策略模式。

谢谢您的回答。这里有很多信息,因此,即使我不以这种方式实施,我也感谢您提供的学习机会和您的响应时间。