我被要求更新現有的「嚮導」,向用戶呈現一系列線性問題。通過參考客戶端提供的流程圖,我可以完成更新此嚮導的任務。流程圖與當前流程顯着不同。鑑於目前所有內容都是用問題編號和有效答案進行硬編碼的,因此要整理所需的更改將非常困難。
這讓我想知道人們會用什麼樣的技巧來建模問題和答案的流程圖/嚮導。我見過使用有限狀態機的參考,但這看起來不太合適。我正在尋找一種技術,可以輕鬆移動,插入和刪除現有問題,而無需對硬編碼引用進行排序。我已經考慮過使用一個可以通過CSV加載的數組,但我不確定隨着問題列表的增長,這將很容易維護。
請注意,掛起的請求也允許隨時跳入和離開向導,具體取決於對話流程。 爲了避免「問題太廣泛」的反應,我正在尋找一種特定的模式或技術,專門爲此目的而創建,而不是一系列可能性。 謝謝!編程問題流程圖/嚮導的最具擴展性的方法?
2
A
回答
2
爲什麼一個有限狀態機不適合?請參閱this wiki about finite-state machine中的旋轉門示例。
綜觀「狀態轉換表」,他們有,你很容易聯想到列標題爲IQuestion
接口的特性:
- 現狀:目前
IQuestion
- 輸入:
IQuestion.Answer
。 - 下一個狀態:
IQuestion.NextIQuestion
- 輸出:無論它對系統做什麼。
你得到的是IQuestion
秒的圖形(可以是各種類型的:MultipleChoiceQuestion,DateQuestion等)。有內置的路由邏輯
你似乎是擔心重用/重排序的問題,你可以通過抽象來處理。也許讓IQuestion
不關心路由問題,只是具有像QuestionText
,PossibleAnswers
等屬性,然後有一個IQuestionNode
可以存儲實際的圖形/路由問題。它可以處理評估IQuestion
,並根據固定順序或通過檢查當前問題的選定答案來提供指向下一個問題的指針。
然後,你真正需要做的就是定義一個狀態/事件表(關於這方面的更多信息,參見wiki解釋),這個表可以被你的系統轉換成這個圖。
您可能還想看看戰略模式,根據不同的需求加載不同圖表的問卷。
相關問題
- 1. ASP.NET MVC3以擴展方法編程導入視圖內容
- 2. 關於eclipse擴展工具生成器編程的問題
- 3. 面向對象編程方法問題
- 4. 面向協議的編程,隱式調用擴展方法
- 5. 擴展方法問題
- 6. 擴展方法PowerMock問題
- 7. 問題與擴展方法
- 8. StartsWith流的擴展方法
- 9. Shell圖標擴展編程
- 10. 響應式編程的可擴展性
- 11. Codeigniter,擴展類方法的問題
- 12. 使用擴展方法的PowerMokito問題
- 13. 問題的擴展方法:IXmlLineInfo
- 14. 流程圖上的問題
- 15. 關於Chrome擴展程序的問題
- 16. Chrome擴展程序中的jGrowl問題
- 17. IQueryable擴展方法的流利語法?
- 18. 的Java多線程的可擴展性問題
- 19. 的Java編程擴展
- 20. 擴展的DataGrid ColumnHeaderStyle編程
- 21. 編程流遇到問題
- 22. 擴展方法中的協同程序
- 23. 線程安全的IQueryable擴展方法
- 24. Chrome擴展更新流程
- 25. 可擴展性問題,與單獨的對象(遠程)
- 26. 在編程中處理打開問題的最有效方法
- 27. 擴展方法和新發布的擴展程序集
- 28. 問題實現加入(...)擴展方法
- 29. 調用擴展類方法問題
- 30. 線程安全的通用擴展方法使用語法問題
感謝您的回答。這裏有很多信息,所以即使我沒有以這種方式實施,我很欣賞你的學習機會和你的迴應時間。 – McArthey 2013-03-18 12:41:13