我正在嘗試開發一個「Person數據庫」Java Swing應用程序,使用Observer/Observable使用MVC設計範例。以下是我正在使用的M/V/Cs的簡化摘要:Java;多個MVC和Swing關係最佳實踐?
App
AppModel
(Empty right now, possibly i'll store certain static application info such as version number here)
AppView
(Creates a JFrame and a few other Swing components)
AppController
(Instantiates AppModel, AppView and also a PersonController and a PersonListController)
Person
PersonModel
(Stores info for 1 person)
PersonView
(Displays a number of form fields inside a JPanel (i.e Name, Age, Phone number). Observes PersonModel.)
PersonController
(Instantiates PersonView. Observes PersonView. Instantiates PersonModel. Updates PersonModel.)
PersonList
PersonListModel
(Stores a list of Persons)
PersonListView
(Displays a list of persons with appropriate Add/Delete buttons. Observes PersonList.)
PersonListController
(Instantiates PersonListView. Observes PersonListView. Instantiates PersonListModel. Updates PersonListModel)
另外,應用程序啓動的'引導程序'。它創建一個新的AppController。
在實際的應用程序中,會有更多(和不同的)模型/視圖/控制器對象,但我希望這個例子保持簡單。
我不明白我能如何將這些獨立的視圖合併到一個用戶界面中,同時保持良好的分離關注點。
以PersonListView爲例。恕我直言,它不需要關心的AppView(與JFrame等)。 PersonListView只需要查看其自己的型號並相應地更新本身。但是,我無法強制執行此操作,因爲PersonListView自己的Swing組件需要添加到另一個視圖的AppView的Swing組件中。
因此,目前AppController正在實例化自己的視圖,並間接加入了一個PersonView和PersonListView(通過控制器的實例化)。 AppController然後爲每個視圖抓取'主'Jpanel,抓取它們應該添加到AppView上的'父'Swing組件,並添加它們。
這似乎並沒有正確的方式來做到這一點。我將擺動相關的成員從他們的藏身處拖走,並在控制器內部與他們搞混了。實際上,在控制器中實例化模型和視圖看起來不太好,但我無法找出更好的方法。
我最近看到足夠的'簡單的MVC'教程,我夢想着血腥的事情 - 但似乎沒有一篇教程涉及多個模型,視圖,控制器的關係,特別是涉及Swing的關係。也許我錯了,應用程序應該只有一個視圖?也許我需要一個'關係'類,它需要每一個模型/視圖/控制器並適當地實例化東西?
任何意見,將不勝感激,因爲我完全茫然!
感謝您的意見,我將嘗試像您所建議的那樣實施組控制器。我想我會讓它在程序中實例化所有MVC,然後根據需要將每個視圖的Swing組件連接在一起。 – user2359111 2013-05-08 13:38:59