0

廣泛的設計/體系結構問題。如果在GUI中有嵌套組件,這些組件與數據交互的最常見方式是什麼?嵌套組件應該如何在GUI應用程序中與模型交互?

例如,假設組件接收到其中一個按鈕的點擊以保存數據。是否應該將保存請求委託給該組件的祖先,最高祖先最終將請求傳遞給控制器​​?

或者GUI應用程序中的模型/數據存儲區通常是單個的,這樣一個層次結構的任何級別的組件都可以直接獲取/設置數據?

或者是作爲組件層次結構的依賴項注入的控制器,以便任何給定的組件只是一個遠離數據存儲區/模型的中間組件?

回答

2

我的第一個想法是定義一個單獨的數據層API,可由GUI組件調用。

如果你想要數據的多個實例,然後給出'句柄',它可以由GUI組件存儲,並傳遞到數據層以再次獲取數據。

這個想法與例如文件系統API類似;或一個SQL服務器API;或任何O/S API。

1

通常,有幾個可能的選擇與嵌套組件操作:

  • 嵌套組件使用相同的模型作爲根組件/嵌套組件使用其自己的模型。

  • 嵌套組件與作爲根組件的相同控制器進行交互/嵌套組件使用其自己的控制器進行操作。

有沒有單一的正確答案使用什麼選項。當然,使用相同的模型和相同的控制器是最簡單的方法,但是如果嵌套組件包含複雜的UI邏輯,則最好將模型或/和控制器分開。

另外,你使用什麼語言?什麼平臺?在不同的編程環境中,不同的實現更好。如果您使用平臺支持面向對象的基於組件的GUI模型,則可以將嵌套控件嵌入到用戶控件中,並獲得可重用封裝的易用組件。

我認爲使用singletons模型/控制器是個壞主意,特別是你使用垃圾回收器的語言。使用單例很簡單,但如果在根視圖上需要第二個嵌套控件實例呢?

1

我同意上述STO:

  • 推數據到底層控制器/視圖模型,其與所述父視圖的C/VM共享是我在我的大多數應用程序做。
  • 單身是一個壞主意!如果您認爲您需要單例,則可以通過調用緩存實例的Factory來獲得相同的結果。例如。 factory.GetAcountViewModel();
  • 我不會將處理委託給父項 - 一般來說。這會降低代碼的可測試性,因爲現在您正在通過UI層傳遞數據和狀態。

只是一個供參考: 如果你是爲一些額外的閱讀,您也想看看http://compositewpf.codeplex.com,解決了組合的UI的推廣問題。

相關問題