2010-11-18 52 views
3

我想建立某種調查/審計軟件。 我頭腦風暴如何建立我的課程,如果有一種設計模式可以支持我。因爲它必須是使生活eaysier ...Question/Answer審計軟件的設計模式

我的應用程序應該有問題,其中包含標題和描述。 然後我有多種類型的答案。

所以......一個類型可以是/否答案 另一種可能是1和10 之間的值,另一種類型可自由文本答案 另一種可能是三點給定文本的選擇,你可以選擇一個(晚餐很好,很好,點頭不好)

所以在調查規劃網站上,我會寫下我的問題並指定答案類型。

而且在執行我希望能踩着它像一個答案的問題收集調查...

基本問題是如何統一所有不同的答案類型以及如何將它們存儲在數據庫中?

我看着複合材料和戰略模式,但我不知道...... 我知道沒有完美的解決方案,它總是取決於...

但是這將是巨大的,如果有人可以分享最佳實踐他們有類似的主題如何dealed ...

在此先感謝...

回答

2

你似乎在這裏問的是有什麼不同的實體映射策略,在數據庫中提供給你什麼?總之,你可以有:

  1. 每個實體的表
  2. 與鑑別值來標識每一個所有實體一個表(值可能只是例如標記化字符串) - 本質上是一個大地圖
  3. 每個實體的表用1:1加入爲可選屬性

然後你的ORM溶液讀取數據從數據庫中返回並把它變成合適的類型的對象(實體)的填充字段,因爲它去。

在中間層而言,則需要以下類:

AbstractQuestion

對問題的抽象基類。包含標題,描述和抽象ask()和answer()方法。 AbstractQuestion將有多種子類,根據問題的類型提供不同的顯示消息。例如,MultiChoiceQuestion將以這樣一種方式實現ask()方法,即標題和說明會被顯示(您可以將其提交到AbstractQuestion ask()方法)以及所有可用的選項(這對每個子類都是特定的) 。這可以是一般化的,以便ask()將Map作爲一個參數,它可以用你喜歡的任何東西填充。或者你可以使用可變參數 - 無論如何。

回答

就含有與代表一起所屬AbstractQuestion參考答案的不同方面稱爲密鑰的地圖一個簡單的類。

問卷

排列在列表AbstractQuestions的集合。對於每個AbstractQuestion調用ask()方法,請等待用戶輸入,然後使用提供的數據調用answer()方法。

不需要複雜的設計模式,除非您將抽象基類作爲模式進行計數。以上是不完整的,但它應該足以讓你開始。

+0

感謝您的回覆......我看着TPT和TPH,我認爲這將是數據存儲的決定。但我更多地考慮中間層......超越ORM ...... – 2010-11-18 13:21:48

+0

@serverinfo編輯以更好地定位問題 – 2010-11-18 13:49:37