2

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

4

1 回答 1

2

为什么有限状态机不合适?请参阅此 wiki 中有关有限状态机的旋转门示例。

查看他们拥有的“状态转换表”,您可以轻松地将列标题视为IQuestion接口的属性:

  • 当前状态:当前IQuestion
  • 输入:IQuestion.Answer
  • 下一个状态:IQuestion.NextIQuestion
  • 输出:无论它对你的系统做什么。

你得到的是一个IQuestion内置了路由逻辑的 s 图(可以是各种类型:MultipleChoiceQuestion、DateQuestion 等)。

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

然后,您真正需要做的就是定义一个状态/事件表(有关更多信息,请参见 wiki 说明),您的系统可以将其转换为该图表。

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

于 2013-03-13T22:13:25.723 回答