2009-08-16 97 views
3

通常在MVC模式中,當用戶點擊頁面時,請求將被髮送,然後控制器將處理請求,然後使用模型處理它並將其路由到適當的視圖。視圖和模型之間是否存在依賴關係?

我已閱讀關於被動模型和主動模型的帖子,但是有沒有可能將視圖直接與模型交互,是雙向關係(即模型< - >視圖)定向(即模型 - >視圖)。

在模型和視圖之間建立關係是否合適?那麼在ASP.NET MVC項目中,我應該有模型和視圖之間的關係,還是讓它獨立於模型?

回答

2

我認爲幾乎總是希望讓您的視圖成爲特定於模型的,即強類型。在模型共享相關數據的情況下,您可以重用特定於該數據子集的部分視圖。在ASP.NET MVC中,你的模型是 - 或者應該 - 對視圖一無所知,因爲它們只能通過Web請求進行交互,這是一個控制器功能。不,你可以說你可以通過網絡服務進行交互,但我認爲這只是控制器的另一種風格。事實上,使用MVC,我很少需要開發獨立的Web服務,而是使用基於REST的控制器操作。

+0

+1捕獲ASP.NET MVC的本質風味。 – 2009-08-16 17:12:09

+0

但是視圖和模型之間是否存在任何交互,我可以看到的是控制器處理請求,使用模型的進程以及生成視圖的動作取決於操作,所以循環是: C-> M-> C-> V(C-Controller,M-Model,V-View),是否有任何實例可以像M-> V – kurozakura 2009-08-16 18:12:14

+0

控制器可以將模型或視圖模型傳遞迴視圖。視圖可以直接訪問它,但只能讀取模型中的值。這將是支持實際上並沒有持續的視圖模型的一個論據。模型本身通常不會包含任何特定於視圖的數據,但實際上我有時會將標記插入到我的視圖模型中 - 比如說其中一列應包含鏈接的網格模型。 – tvanfosson 2009-08-16 18:29:30

0

在的Java Swing MVC實現爲視圖和控制器相結合,以期既可以從模式和寄存器從中事件,有效地使它們鬆散地互相依賴的讀取。

通常Web應用程序不這樣做,因爲真正的視圖顯示在客戶端上,可以不容易接收到來自模型事件,所以在這些情況下的關係,唯一無二的一種方式。只要模型不直接依賴和查看類,在模型和視圖之間建立關係當然不是一件壞事。在這種情況下,將會建立一個依賴週期並危害維護,尤其是測試。

例如,這是在Swing實現的方法是通過一個監聽器接口,其中所述視圖可以然後實現/提供的該模型的實現。

1

我總是看到視圖作爲呈現模型的方式。根據這個觀點,View是Model aware,並且在ASP.NET MVC中,您應該從ViewPage繼承頁面以避免濫用ViewData或castings。

考慮到這一點,該模型是不查看知道並僅僅是從視圖用於將數據呈現給用戶的對象。

最後,你可以分享不同的觀點相同的模型,例如XML輸出可以共享相同的模型作爲HTML輸出,但觀點是非常不同的。

週期是多還是少,控制器生成模型,其傳遞給查看,顯示德模型的情況下,有相互作用,訊息輸入到控制器和循環再次開始。