廣泛的設計/體系結構問題。如果在GUI中有嵌套組件,這些組件與數據交互的最常見方式是什麼?嵌套組件應該如何在GUI應用程序中與模型交互?
例如,假設組件接收到其中一個按鈕的點擊以保存數據。是否應該將保存請求委託給該組件的祖先,最高祖先最終將請求傳遞給控制器?
或者GUI應用程序中的模型/數據存儲區通常是單個的,這樣一個層次結構的任何級別的組件都可以直接獲取/設置數據?
或者是作爲組件層次結構的依賴項注入的控制器,以便任何給定的組件只是一個遠離數據存儲區/模型的中間組件?
廣泛的設計/體系結構問題。如果在GUI中有嵌套組件,這些組件與數據交互的最常見方式是什麼?嵌套組件應該如何在GUI應用程序中與模型交互?
例如,假設組件接收到其中一個按鈕的點擊以保存數據。是否應該將保存請求委託給該組件的祖先,最高祖先最終將請求傳遞給控制器?
或者GUI應用程序中的模型/數據存儲區通常是單個的,這樣一個層次結構的任何級別的組件都可以直接獲取/設置數據?
或者是作爲組件層次結構的依賴項注入的控制器,以便任何給定的組件只是一個遠離數據存儲區/模型的中間組件?
我的第一個想法是定義一個單獨的數據層API,可由GUI組件調用。
如果你想要數據的多個實例,然後給出'句柄',它可以由GUI組件存儲,並傳遞到數據層以再次獲取數據。
這個想法與例如文件系統API類似;或一個SQL服務器API;或任何O/S API。
通常,有幾個可能的選擇與嵌套組件操作:
嵌套組件使用相同的模型作爲根組件/嵌套組件使用其自己的模型。
嵌套組件與作爲根組件的相同控制器進行交互/嵌套組件使用其自己的控制器進行操作。
有沒有單一的正確答案使用什麼選項。當然,使用相同的模型和相同的控制器是最簡單的方法,但是如果嵌套組件包含複雜的UI邏輯,則最好將模型或/和控制器分開。
另外,你使用什麼語言?什麼平臺?在不同的編程環境中,不同的實現更好。如果您使用平臺支持面向對象的基於組件的GUI模型,則可以將嵌套控件嵌入到用戶控件中,並獲得可重用封裝的易用組件。
我認爲使用singletons模型/控制器是個壞主意,特別是你使用垃圾回收器的語言。使用單例很簡單,但如果在根視圖上需要第二個嵌套控件實例呢?
我同意上述STO:
只是一個供參考: 如果你是爲一些額外的閱讀,您也想看看http://compositewpf.codeplex.com,解決了組合的UI的推廣問題。