我有一個引用視圖的模型,一個引用了模型和視圖的控制器,以及一個沒有引用上面的解耦視圖。這是在java中使用MVC的正確方法嗎?
控制器具有視圖的所有偵聽器,並通過調用模型和視圖上的方法來處理事件。該模型在其某些方法中調用視圖上的方法。
這對維護和重用是否有害,應該只在控制器中調用所有視圖方法嗎?此外,我還沒有將模型設置爲observable,控制器和視圖作爲觀察者,如某些示例所示。這是常見的做法嗎?
我有一個引用視圖的模型,一個引用了模型和視圖的控制器,以及一個沒有引用上面的解耦視圖。這是在java中使用MVC的正確方法嗎?
控制器具有視圖的所有偵聽器,並通過調用模型和視圖上的方法來處理事件。該模型在其某些方法中調用視圖上的方法。
這對維護和重用是否有害,應該只在控制器中調用所有視圖方法嗎?此外,我還沒有將模型設置爲observable,控制器和視圖作爲觀察者,如某些示例所示。這是常見的做法嗎?
我會避免直接耦合從模型到視圖,或者至少只能作爲非常特殊的情況(即使在當時,這可能暗示,該國被操縱是不正確的模型狀態,但呈現的狀態。)
通常,模型使用偵聽器來通知更改,而不是直接耦合到視圖。該視圖可以直接引用該模型,以便它可以獲取要顯示的數據。雖然這可能不是絕對必要的 - 但是在視圖需要時,所有更改都可以作爲偵聽器通知從模型傳播到視圖,但這通常是一個壞主意,因爲它將視圖的呈現與來自該模型。
綜上所述,控制器對通知感興趣方(包括視圖)的模型進行了更改。該視圖提供了檢索數據的模型。
遵循經典的MVC模式,模型不能直接訪問視圖。但是,間接訪問 - 例如通過觀察者 - 可以幫助提醒視圖對基礎數據的更改。
模型不應該對視圖有任何瞭解。 視圖應該知道如何在給定模型的情況下自行填充。
如果您的模型將要更改,它可能想讓視圖知道任何更改,以便顯示可以更改。
Sun.com上有一篇不錯的博客文章:Java SE Application Design With MVC。它首先解釋視圖和模型直接相互作用的「經典」MVC模式,然後繼續使用新的「集中控制器」MVC模式,其中視圖和模型只能通過控制器相互通信(模型是與視圖分離)。它也包含一個Swing目標示例。
在桌面上Swing是一個很好的GUI庫。查看article以瞭解它與MVC的關係。對於企業,請查看Martin Fowler的模型視圖控制器模式(330)以瞭解基於Web的應用程序。如果您沒有他的書(企業應用程序架構模式),我強烈建議您獲取副本。
如果沒有參考視圖到模型,視圖如何知道要顯示的內容? – mdma 2010-08-17 14:11:13
@mdma視圖應該知道模型,而不是反之亦然 – 2010-08-17 14:14:29
@Romain - 這就是我所追求的。OP表示該模型知道該視圖,而不是相反。 – mdma 2010-08-17 14:17:25