2008-12-27 57 views
8

這是關於一個學校的任務,所以我試圖按照本書做事。我覺得自己正在掌握Java,但良好的編程習慣,設計模式等對我來說都是相當新穎的。Java中的MVC

我做了我的模型,它工作正常。它包含一個學生類,其中包含許多帶有學生信息的字段(顯然)。現在我想將這些信息顯示在幾個JLabel中。將整個學生對象傳遞給GUI最簡單,並使用JLabel.settext.getname()等很多次,毫無疑問,這會很好地工作。但我覺得學生對象是模型的一部分,並將它傳遞給GUI,我不再使用MVC模式。我在這裏嗎?

我做了一個控制器對象,用於向模型和GUI傳遞數據,但只傳遞字符串到標籤或通過控制器設置JLabel文本,我需要GUI中的很多setter,或者我將不得不使所有JLabels全球領域都感覺不好。

對此有何建議?

回答

1

圖形用戶界面應該擔心所有的界面的東西。我想你有一個類是你的GUI,用你的JLabels爲學生做'東西'。只需將你的學生實例傳遞給這個類,並讓它做它需要做的事情。完成後,它會調用一個控制器方法來完成任何需要的操作。

OOD處理傳遞你想要操作的對象。您不需要爲了傳遞MVC而拆分對象。如果這是一般情況,你應該真的把它傳遞出去。模型定義了您將要使用的數據對象......或者更具體地說,系統將與(控制器)一起工作,用戶將使用(GUI)。這些課程是建立在傳遞的。如果你解開所有的信息,你將不得不做更多的工作嘿:)

4

請注意,Swing組件都在內部使用MVC模式,因此它們已經有了一個模型。這與JTable等複雜小部件更爲相關,在這些小部件中,您肯定希望模型實現TableModel接口。

最大的問題是如何將您的領域模型與各個Swing組件的內部模型進行協調。這樣做的一個方法是讓setModel()getModel()方法在你的GUI類,它們之間的轉換,即setModel()把你的模型,並呼籲對個人的JLabel setText()

0

的觀點需要你的模型來創建用戶界面(從模型中拉出)並從中接收更新(按模型推送)。理想情況下,該模型以只讀方式呈現給視圖。控制器將提供視圖將用於更新模型的方法,以便更好地分離關注點。

有很多不同的形式和MVC究竟是什麼解釋,嘗試谷歌搜索它。此外,您經常可以在應用程序的不同級別上找到MVC(例如,Swing模型,您的域模型...)。

有了MVC和MVC上的變體,最重要的是你可以解釋各個子模式(Observer,Facade,...)並捍衛你所做的設計選擇(優點/缺點),而不是試圖實現獨一無二的MVC模式,如果它存在。如果可能的話,那麼我的建議就是實現一些運行良好的東西,這些東西的啓發來自於你在MVC及其子模式上閱讀的內容,並且之後纔看到它對於某些內容的贊同或不贊同您可以找到關於MVC模式的「傳統」描述。

+0

這一切都是事實,但不要忘記,作業往往是關於你的老師,而不是作業。可悲的是。 – 2008-12-27 12:48:23