2013-03-12 21 views
2

我被要求更新現有的「嚮導」,向用戶呈現一系列線性問題。通過參考客戶端提供的流程圖,我可以完成更新此嚮導的任務。流程圖與當前流程顯着不同。鑑於目前所有內容都是用問題編號和有效答案進行硬編碼的,因此要整理所需的更改將非常困難。
這讓我想知道人們會用什麼樣的技巧來建模問題和答案的流程圖/嚮導。我見過使用有限狀態機的參考,但這看起來不太合適。我正在尋找一種技術,可以輕鬆移動,插入和刪除現有問題,而無需對硬編碼引用進行排序。我已經考慮過使用一個可以通過CSV加載的數組,但我不確定隨着問題列表的增長,這將很容易維護。
請注意,掛起的請求也允許隨時跳入和離開向導,具體取決於對話流程。 爲了避免「問題太廣泛」的反應,我正在尋找一種特定的模式或技術,專門爲此目的而創建,而不是一系列可能性。 謝謝!編程問題流程圖/嚮導的最具擴展性的方法?

回答

2

爲什麼一個有限狀態機不適合?請參閱this wiki about finite-state machine中的旋轉門示例。

綜觀「狀態轉換表」,他們有,你很容易聯想到列標題爲IQuestion接口的特性:

  • 現狀:目前IQuestion
  • 輸入:IQuestion.Answer
  • 下一個狀態:IQuestion.NextIQuestion
  • 輸出:無論它對系統做什麼。

你得到的是IQuestion秒的圖形(可以是各種類型的:MultipleChoiceQuestion,DateQuestion等)。有內置的路由邏輯

你似乎是擔心重用/重排序的問題,你可以通過抽象來處理。也許讓IQuestion不關心路由問題,只是具有像QuestionText,PossibleAnswers等屬性,然後有一個IQuestionNode可以存儲實際的圖形/路由問題。它可以處理評估IQuestion,並根據固定順序或通過檢查當前問題的選定答案來提供指向下一個問題的指針。

然後,你真正需要做的就是定義一個狀態/事件表(關於這方面的更多信息,參見wiki解釋),這個表可以被你的系統轉換成這個圖。

您可能還想看看戰略模式,根據不同的需求加載不同圖表的問卷。

+0

感謝您的回答。這裏有很多信息,所以即使我沒有以這種方式實施,我很欣賞你的學習機會和你的迴應時間。 – McArthey 2013-03-18 12:41:13