2016-02-24 38 views
0

我想實現我的Java桌面應用程序的MVC,我不是很熟悉它。爲了這個問題的目的,我正在考慮一個用例,在這個用例中點擊「刷新」按鈕,它查詢數據庫中的學生列表並更新學生列表。以下是我一直困惑的問題:當涉及到列表和數據庫MVC混淆

1 - 對於查詢數據庫,它發生在控制器還是模型中?我的直覺告訴我們,控制器收到查詢並收到結果後,會更新模型。不過,我在很多帖子中讀到,模型是知道狀態轉換並更新的人!

2-誰創建了視圖和模型?控制器是創建它們還是創建它們並傳遞給控制器​​?

3-在上面的用例中,模型是由學生的ArrayList組成還是僅僅是一個Student對象的模型,但是Controller有模型和ArrayList?

請幫老鄉開發商

+0

誰低估,謹慎地說爲什麼?這是一個非常有效的問題 – Snake

+0

請將您的帖子限制爲每個帖子一個問題 –

回答

1

用於查詢數據庫,它在控制器或模型發生?

簡答題,查詢數據庫發生在模型中。

Student列表是GUI的模型,其中Student是包含學生信息的Java對象。學生名單也是數據庫的典範。

您可以通過不同方式來處理學生列表和數據庫之間的交互。一種方法是在GUI初始化開始時讀取所有學生信息。當您的用戶與GUI進行交互時,您的GUI控制器將插入,更新並標記學生在GUI模型中刪除。最後,當用戶關閉GUI時,將學生列表中的所有更改寫入數據庫。這種方式雖然簡單,但如果GUI異常終止,則會導致數據損壞。而且,一次只有一個人可以更改數據庫。

更好的方法是像以前一樣在GUI初始化開始時讀取所有學生信息。當用戶與GUI進行交互時,GUI控制器會更新GUI模型中的學生列表。每次插入,更新或刪除後,都會調用數據訪問對象中的相應方法分別插入,更新或刪除學生信息。

誰創建了視圖和模型?

你這樣做。 :-)

模型/視圖/控制器模式不僅僅用於組織代碼。通常,您首先創建模型的第一個切割。然後創建視圖,並將這些字段添加到創建第一個剪輯時忘記的模型中。最後,你創建控制器。控制器除了執行模型中的方法外,不應該做任何事情來更新視圖中的模型和方法,以重新繪製視圖或重新驗證視圖。

您將模型的實例和視圖的實例傳遞給您的控制器。您應該只有一個模型實例和一個視圖實例。但是,他們不是單身人士。

在上面的用例中,模型是由學生的ArrayList組成還是僅僅是一個Student對象的模型,但是Controller有模型和ArrayList?

最後,一個簡單的問題。都不是。

您的型號是列表的學生。 List接口將由ArrayList類實現。像這樣的東西。

List<Student> studentList = new ArrayList<>(); 

通過使用接口,您可以輕鬆地將ArrayList更改爲LinkedList或您自己的List接口的實現。

一般的Java規則是使用接口,除非你需要的方法只在具體類中定義。

我希望這是有幫助的。