2009-04-10 55 views
2

我已經在Web上做了大量有關MVC的工作,我們正在使用OOP類來了解它。我看到了一些差異,我無法分辨這是因爲Web版本的MVC模式與傳統模式不同,還是我誤解了它。Web的MVC版本與傳統的MVC不同嗎?

從我的理解,模型(你的平面文件,RDBMS'等)是一個通用的數據住房對象。視圖(瀏覽器,HTML等)是用戶與之交互的內容,控制器在用戶操作和數據之間進行中介。控制器是最具領域特色的部分,它管理視圖,告訴模型需要什麼,並告訴視圖顯示什麼。

在課堂上,我們有與我剛剛描述的視圖匹配的內容,模型包含視圖列表,以便在數據更改時更新它們,並且控制器簡單地將用戶的操作映射到模型的調用,到特定的對象(它們本身可以讓模型更新視圖)。最終發生的事情是,大多數業務邏輯都在模型中,並且與正在編寫的模擬或應用程序有很大的關係,而控制器被簡化爲命令和方法之間的映射工具。

你對此有何看法?

回答

3

在非web接口中,控制器處理來自諸如鍵盤和鼠標之類的輸入,根據這些輸入選擇要呈現哪些視圖以及在模型中進行哪些更改。視圖和模型可以更密切相關,因爲視圖可以直接向模型實體註冊回調以通知更改,因此可以直接對模型的更改進行更新,而不是由控制器更新。

在網絡世界中,視圖必然與模型更加脫鉤。它必須通過控制器動作來執行,因爲它無法直接訪問(在呈現並傳遞到瀏覽器之後)模型。控制器在這個環境中扮演更重要的角色,即使它唯一需要處理的「輸入」是瀏覽器請求。從某種意義上講,過去與非web MVC中的視圖發生的耦合被轉移到代表它的控制器上。由於模型沒有迴應(現在讓我們忘記「推」技術),更多的業務代碼被整合到控制器中,因爲它是模擬業務流程的自然地點,但可能不是驗證。

+0

爲什麼這個好的答案沒有得到太多upvotes? Thx! – 2015-02-26 12:53:31

0

在我的理解中,控制器中的MVC模式只是模型和視圖之間的橋樑,他們只是從模型中獲取數據並將其傳遞給視圖。模型和視圖是獨立的,從不相互交流。

+0

這就是我的想法。但是,如果你看看http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/images/app-archa2.gif,它說模型會通知變化的觀點,這對我來說沒有任何意義。 – 2009-04-10 02:48:02

+0

MVC和「三層體系結構」之間有一個有趣的區別請參閱維基百科鏈接:http://en.wikipedia.org/wiki/Multitier_architecture#Comparison_with_the_MVC_architecture – 2009-04-10 03:17:11