MVC汁展,MVP 和 MVVM 的圖示 - 阮一峰的網(wǎng)絡(luò)日志

SSY說:

原來我一直做的是MVP呀

2015年2月 1日 11:57|#|引用

Simba說:

很好貌夕。寫的不錯(cuò)。

2015年2月 1日 11:58|#|引用

Ricter說:

這么說來 Django 好像是一個(gè) MVP 框架的樣子了…

2015年2月 1日 12:50|#|引用

dreamers.yzy說:

MVC是單向的?不是V->C->M -> C -> V 嗎?

2015年2月 1日 13:01|#|引用

Welkin說:

清晰易懂

2015年2月 1日 15:51|#|引用

Milkman說:

簡明踊挠,真知灼見;不像市面上很多文章那般說一揉二冲杀,摻雜一起弄得復(fù)雜方顯高深效床,骨架連肉一起亂燉,反致初學(xué)者云里霧里权谁。

2015年2月 1日 16:16|#|引用

Benja說:

跟馬老師說的不一樣扁凛,阮老師確定嗎?

附上:

PoEAA -http://martinfowler.com/eaaCatalog/modelViewController.html

MSDN -https://msdn.microsoft.com/en-us/library/ff649643.aspx

2015年2月 1日 16:18|#|引用

kuangyuang說:

看這篇文章可能更容易理解:http://objccn.io/issue-13-1/

2015年2月 1日 16:57|#|引用

xiaorong61說:

要是再談?wù)勛罱餍械?flux react 就好了

2015年2月 1日 17:28|#|引用

Nancy說:

引用dreamers.yzy的發(fā)言:

MVC是單向的?不是V->C->M -> C -> V 嗎?

同問闯传,有點(diǎn)不是很理解為什么是單向的呢?

2015年2月 1日 18:10|#|引用

end-e說:

引用dreamers.yzy的發(fā)言:

MVC是單向的?不是V->C->M -> C -> V 嗎?

我所了解到的情況也是v-c-m-c-v這個(gè)流程卤妒。甥绿。

2015年2月 1日 21:22|#|引用

wittyfox說:

在微博你純屬測試為知筆記功能 @mywiz,打開為知筆記果然看到了则披,看完了之后來這里頂一下共缕。

正好這三個(gè)模式我都認(rèn)識惕橙,^_^骏全。我是自學(xué) Rails 的昌阿,Rails 就是 MVC 的酷鸦,剛開始學(xué) Rails 時(shí)逮刨,把邏輯都放進(jìn)了 Views 里李根,雖然 Rails 提供了 Helper嘲碧,但是感覺不 OO昂秃,就沒用冗荸。后來發(fā)現(xiàn) Views 邏輯太多了承璃,而想對網(wǎng)站外觀進(jìn)行修改時(shí)就很費(fèi)力,放進(jìn) Model 中的話蚌本,在 Model 中生成 URL 等就很復(fù)雜了盔粹,需要包含各種 Rails Helper隘梨。后來發(fā)現(xiàn)了 Github 上的 Presenter,就是把不知道該放進(jìn) View 還是 Model 的東西放進(jìn)去舷嗡,View 中不再與 Model 交互轴猎,今天才知道這叫 MVP。MVVM 是我看的 Rails 作者的一篇文章中寫得进萄,英文不好捻脖,當(dāng)時(shí)看個(gè)大概,沒怎么明白垮斯,今天才明白了郎仆。 >_

2015年2月 1日 23:58|#|引用

Joshua說:

MVC在bs架構(gòu)和cs架構(gòu)上差別很大,即使同是bs兜蠕,因?yàn)槭褂玫募夹g(shù)的差別扰肌,業(yè)務(wù)的差別,架構(gòu)的差別熊杨,MVC的通信方式也會和原來你書本上看到的不一樣曙旭。就像backbonejs和angularjs的出現(xiàn),是發(fā)明還是延伸晶府,還是糟蹋桂躏?每天和它一起工作的人才知道。

所有的設(shè)計(jì)應(yīng)該以貼近自然或接近自然規(guī)律為目標(biāo)川陆。再通俗的講剂习,用的舒服就是自然。好的東西絕對不需要強(qiáng)記一堆原理來理解的较沪。

2015年2月 2日 10:35|#|引用

andong777說:

引用end-e的發(fā)言:

我所了解到的情況也是v-c-m-c-v這個(gè)流程鳞绕。。

是的尸曼,我理解的MVC也是這個(gè)流程的……

2015年2月 2日 17:01|#|引用

Tardis0127說:

iOS開發(fā)中大部分使用的MVC和阮兄說的MVP一樣... 有些人也會做成MVVM

2015年2月 3日 02:29|#|引用

KILLVIN_LIU說:

這里的MVP, MVVM甚至MXXX都只是MVC的變體而已们何,至于將重點(diǎn)放在C點(diǎn)還是V點(diǎn)(沒人會希望放到M點(diǎn)吧??亟巍)就自然引出了若干種所謂的模式冤竹,其實(shí)模式只有一種,你稱為P也好VM也好茬射,它都只是C的實(shí)例而已鹦蠕。總是設(shè)法弄出一些所謂的Business Word的家伙們在抛,是前端開發(fā)最大的敵人片部!

2015年2月 3日 11:32|#|引用

Tardis0127說:

引用KILLVIN_LIU的發(fā)言:

這里的MVP, MVVM甚至MXXX都只是MVC的變體而已,至于將重點(diǎn)放在C點(diǎn)還是V點(diǎn)(沒人會希望放到M點(diǎn)吧?5涤啤)就自然引出了若干種所謂的模式廊鸥,其實(shí)模式只有一種,你稱為P也好VM也好辖所,它都只是C的實(shí)例而已惰说。總是設(shè)法弄出一些所謂的Business Word的家伙們缘回,是前端開發(fā)最大的敵人吆视!

真的不一樣... 雖然同源, 但是實(shí)踐起來效果是不一樣的... 簡潔清晰高效的構(gòu)架不是程序員的畢生追求嗎?

2015年2月 3日 13:39|#|引用

fastzhong說:

寫得很好。另外提一句酥宴,我是計(jì)算機(jī)背景啦吧,老程序員了,對于那些說什么你錯(cuò)誤很多拙寡,我可以負(fù)責(zé)任地說授滓,把自己的理解和想法寫出來,你比大多數(shù)人水平高很多了肆糕,但肯定有些不完善的地方般堆,大家可以討論一起進(jìn)步,這是重點(diǎn)诚啃,因?yàn)槟銢]有錯(cuò)誤很多淮摔!

2015年2月 4日 10:59|#|引用

kidd說:

覺得無法理解“雙向綁定”和“相互通信”,這兩個(gè)的最終效果其實(shí)是一樣的嗎始赎?

2015年2月 4日 15:48|#|引用

天空布藍(lán)說:

引用andong777的發(fā)言:

是的和橙,我理解的MVC也是這個(gè)流程的……

看來很多人 MVC才是最難解 呵呵

2015年2月 5日 10:08|#|引用

zy說:

『唯一的區(qū)別是,它采用雙向綁定(data-binding):View的變動造垛,自動反映在 ViewModel魔招,反之亦然』

——>難道不是:Model的變動,自動反映在 ViewModel 嗎筋搏?

2015年2月 5日 11:31|#|引用

那誰說:

我是搞web后臺的,我對MVC的理解是:

M=數(shù)據(jù)對象+數(shù)據(jù)訪問+業(yè)務(wù)邏輯厕隧,必要時(shí)可以分層

C=路由+視圖邏輯

V=視圖奔脐,如果是接口開發(fā)這層可以不要

Fat model, thin controller

是不是不同的軟件對MVC的理解不同?

2015年2月 7日 22:59|#|引用

xuhong說:

這個(gè)是不同領(lǐng)域不一樣的吁讨,阮兄這說的應(yīng)該只是前端領(lǐng)域髓迎,不然會造成誤解。對于后端以及ios等其他領(lǐng)域都是不適用的建丧。

2015年2月10日 19:23|#|引用

zhanyaha說:

http://www.cnblogs.com/winter-cn/p/4285171.html

2015年2月11日 09:33|#|引用

lijunwu說:

只能說都用過排龄,理解還是不到位

2015年2月12日 02:05|#|引用

dark89757說:

MVVM 中的view是綁定了viewmodel的命令了的,所以我覺得MVVM的view也應(yīng)該指向viewmodel

2015年2月13日 09:27|#|引用

Liuzh說:

引用andong777的發(fā)言:

是的翎朱,我理解的MVC也是這個(gè)流程的……

我理解的也是這種情況橄维。

從現(xiàn)在類似angularjs這種Model才能直接影響view尺铣。。

在java中的MVC争舞,應(yīng)該就是我們理解的這個(gè)V->C->M->C->V

2015年2月13日 14:54|#|引用

justNode說:

引用那誰的發(fā)言:

我是搞web后臺的凛忿,我對MVC的理解是:

M=數(shù)據(jù)對象+數(shù)據(jù)訪問+業(yè)務(wù)邏輯,必要時(shí)可以分層

C=路由+視圖邏輯

V=視圖竞川,如果是接口開發(fā)這層可以不要

Fat model, thin controller

是不是不同的軟件對MVC的理解不同店溢?

我比較認(rèn)同你的看法。不過博主這篇說的是前端mvc委乌,跟后端還是有很大區(qū)別的床牧。 順便說一句,阮老師對于前端框架的很多觀點(diǎn)都是不妥當(dāng)?shù)模ㄗh看看寒冬那篇 UI架構(gòu)設(shè)計(jì)的演化

2015年2月15日 03:02|#|引用

anthony說:

對MVC的理解偏差很大.

M,V之間是Observer模式,即V直接依賴M,M間接依賴V.M,C之間是C直接依賴M.這兩點(diǎn)是MVC中最廣泛認(rèn)可,同時(shí)也是MVC成為一個(gè)解決方案模式的關(guān)鍵:視圖和邏輯分離.

理想的MVC模式中V,C之間沒有直接依賴(沒有單向依賴),但現(xiàn)實(shí)中做不到.Native應(yīng)用要一般由view分發(fā)事件給controller,controller要決定那些view用戶可見.

Web應(yīng)用中情況好一點(diǎn).用戶可以直接通過url直接訪問controller,不需要view知道controller,但是controller還負(fù)責(zé)路由view.前端復(fù)雜化后,頁面上與controller交互更頻繁,controller也很難只通過url來實(shí)現(xiàn)了.

事實(shí)上MVC有三個(gè)問題:

1.V和M之間不匹配,用戶界面和流程要考慮易用性,用戶體驗(yàn)優(yōu)化同時(shí)考慮業(yè)務(wù)流程的精確和無錯(cuò).

2.C和M之間界線不清,什么樣的邏輯是界面邏輯,什么樣的邏輯是業(yè)務(wù)邏輯,很難定義清楚.

3.V的變化不能完全由Model控制,即observer模式不足以支持復(fù)雜的用戶交互.這其實(shí)要求VC之間要有依賴.

后來的MVP與MVVM都是為了優(yōu)化V,C之間的關(guān)系而提出的.

MVP認(rèn)為VC之間強(qiáng)綁定不可避免, 但可以加強(qiáng)P的能力,V變成只顯示,P提供數(shù)據(jù)給V,把雙向依賴簡化為P直接依賴于V.

由于V的數(shù)據(jù)由P提供,則MV之間的Observer關(guān)系轉(zhuǎn)移到MP之間.

MVP主要解決1,3兩個(gè)問題,但代價(jià)是加重了問題2.P更重,而且與Model耦合無法框架化.但實(shí)踐中view很難完全被動

化,它總是會隨用戶的事件變化,這部分成為P的負(fù)擔(dān).

而MVVM則是另一個(gè)方面來解決問題.MVVM認(rèn)為view應(yīng)該是事件驅(qū)動,模型變化只是一種事件.C應(yīng)該只處理view與模型不

配合的問題,而問題3可以通過分離用戶交互與界面構(gòu)造.C退化為一個(gè)View的模型VM,它與view之間由框架提供事件-

數(shù)據(jù)的綁定.

MVVM與MVP相比主要徹底解決了問題1,重新定義了問題2,在MVVM中VM的功能比較明確,把M翻譯成View需要的數(shù)據(jù).

VM有一定視圖的屬性,view與VM有對應(yīng)關(guān)系,也就解決一部分問題3.但是由于各角色職責(zé)已經(jīng)定義,需要引入第四個(gè)

組件來解決這個(gè)問題.

我們可以打個(gè)分,直接依賴計(jì)為1,間接依賴計(jì)為0.5

全部互相依賴是6

理想MVC,MV=1.5,MC=1共2.5

現(xiàn)實(shí)MVC根據(jù)VC之間的依賴情況可能是0.5到2,實(shí)際是3到4.5

MVP,MP=1.5,VP=1,MV=0共2.5與理想情況一致.

MVVM,MVM=1.5,VM+V=0.5或1,共2到2.5,即不高于理想MVC

2015年2月17日 12:20|#|引用

ChenKan說:

標(biāo)題改為『前端框架MVC遭贸,MVP 和 MVVM 的圖示』似乎更加妥當(dāng)

2015年3月 3日 09:52|#|引用

Sunny說:

你好戈咳,個(gè)人覺得MVC中C應(yīng)該程序的流轉(zhuǎn),非業(yè)務(wù)處理

2015年3月13日 11:04|#|引用

wang說:

avalon.js也是一個(gè)MVVM的javascript框架

2015年3月22日 22:51|#|引用

陳計(jì)節(jié)說:

引用anthony的發(fā)言:

對MVC的理解偏差很大.

M,V之間是Observer模式,即V直接依賴M,M間接依賴V.M,C之間是C直接依賴M.這兩點(diǎn)是MVC中最廣泛認(rèn)可,同時(shí)也是MVC成為一個(gè)解決方案模式的關(guān)鍵:視圖和邏輯分離……

感謝分享革砸,我覺得您的補(bǔ)充十分必要除秀。

2015年3月23日 22:55|#|引用

陳計(jì)節(jié)說:

引用ChenKan的發(fā)言:

標(biāo)題改為『前端框架MVC,MVP 和 MVVM 的圖示』似乎更加妥當(dāng)

幾個(gè)不同的意見算利。

如 ChenKan 所言册踩,請網(wǎng)友注意,阮兄此文主要講到前端的 MVC 和相關(guān)模式的討論效拭。

1. 作者提到 MVC 的兩種流暂吉,但舉出 Backbone.js 的例子卻全然不符合這兩種例子中的任何一種。因?yàn)?Backbone.js 本來是更強(qiáng)調(diào) View邏輯——是 View邏輯缎患,不是 View慕的。View邏輯即 Presenter。因此 Backbone.js 本質(zhì)上是一種 MVP 模式挤渔。之所以有 Router肮街,因?yàn)樗緛砭褪且环N Route:沒有這些 Route,一個(gè) RIA APP 一樣工作的很正常判导;Route 雖然看起來也有 C 的作用嫉父,但它更重要的是導(dǎo)航功能,在它里面對 render view 的調(diào)用本來就是反模式眼刃,事實(shí)證明在 View 的 initialize 中調(diào)用一樣合適绕辖,參考此文章中的論述:https://lostechies.com/derickbailey/2011/12/23/backbone-js-is-not-an-mvc-framework/。

2. 我認(rèn)為阮兄說的兩種 MVC 流程是錯(cuò)誤的擂红。(1) Model 無法將數(shù)據(jù)“發(fā)送”給 View仪际,因?yàn)樗静恢?View 的存在,數(shù)據(jù)應(yīng)該是由 Controller 持有,并顯示出 View树碱。 (2) 因此肯适,用戶也不是直接操作 Controller,即使是輸入 URL赴恨,也可以認(rèn)為那是由 View 觸發(fā)的(就像在 View 上點(diǎn)擊了一個(gè)鏈接)疹娶。

因此,MVC 的處理流程是 V -> C -> M -> C -> V伦连。

3. MVP 模式實(shí)際上就是 MVC雨饺,只不過這里面的 C 主要負(fù)責(zé)的不再是業(yè)務(wù)邏輯,而是界面邏輯了惑淳,比如何時(shí)顯示/隱藏某個(gè)選項(xiàng)卡额港,綁定 View 事件等。

4. 我們現(xiàn)在在討論的 MVC 與經(jīng)典的 MVC 略有不同歧焦,經(jīng)典的 MVC 里移斩,C 是應(yīng)用控制器,包括路由的概念绢馍;而現(xiàn)代軟件 UI 層的 C 通常僅包含界面相關(guān)邏輯的處理向瓷。

5. 對于 MVVM 的模式,確實(shí)在 B/S 和 C/S 界有不同理解舰涌,這一點(diǎn)值得提醒猖任。

(對上面那篇略作完善,還請阮兄幫我刪除上面那篇評論瓷耙,非常感謝朱躺。)

2015年3月23日 23:53|#|引用

zjien說:

難道我把MVP理解成了MVC?

2015年4月19日 17:02|#|引用

goldli說:

我想搁痛,從樓上(s)的討論中长搀,我得到了一些啟發(fā)。但具體在coding時(shí)要怎么用鸡典,要用什么源请,是要看具體情況而定的;而且隨著人類思維的開闊彻况,將來可能會有更好的模式谁尸。所以,不用太糾結(jié)疗垛。先會用症汹,能用好就可以硫朦。不是嘛贷腕?

2015年5月 8日 14:36|#|引用

fxdan2002說:

引用goldli的發(fā)言:

我想,從樓上(s)的討論中,我得到了一些啟發(fā)泽裳。但具體在coding時(shí)要怎么用瞒斩,要用什么,是要看具體情況而定的涮总;而且隨著人類思維的開闊胸囱,將來可能會有更好的模式。所以瀑梗,不用太糾結(jié)烹笔。先會用,能用好就可以抛丽。不是嘛谤职?

說的很對。

本來是想了解這幾個(gè)的區(qū)別的亿鲜,結(jié)果查了半天允蜈,越看越暈。其實(shí)領(lǐng)悟了模式的精髓蒿柳,能用好就行饶套,至于叫什么并不重要

2015年6月12日 16:22|#|引用

jet755說:

Comparison of Architecture presentation patterns MVP(SC),MVP(PV),PM,MVVM and MVC

http://www.codeproject.com/Articles/66585/Comparison-of-Architecture-presentation-patterns-M

2015年7月13日 17:32|#|引用

newbie說:

引用那誰的發(fā)言:

我是搞web后臺的,我對MVC的理解是:

M=數(shù)據(jù)對象+數(shù)據(jù)訪問+業(yè)務(wù)邏輯垒探,必要時(shí)可以分層

C=路由+視圖邏輯

V=視圖妓蛮,如果是接口開發(fā)這層可以不要

Fat model, thin controller

是不是不同的軟件對MVC的理解不同?

贊同叛复,MVC(mvc mvp mvvm)就是路演成了你理解的這樣仔引,責(zé)權(quán)分明。過去整個(gè)web開發(fā)比較容易發(fā)現(xiàn)的混亂想象就是:視圖與邏輯混雜在一起褐奥,視圖(應(yīng)用)邏輯與業(yè)務(wù)邏輯混雜在一起咖耘。

2015年8月31日 23:35|#|引用

kenshin說:

@陳計(jì)節(jié):

贊同對MVC模式的修正2(1),在移動Native應(yīng)用中同樣如此撬码,Model和View需要盡可能的分離

2(2)也有類似想法web中URL實(shí)際上也是在操作view儿倒,只不過這個(gè)view是瀏覽器本身(本人3年前從web開發(fā)轉(zhuǎn)到移動前端開發(fā))

對于3.MVP,@ anthony講的非常明白呜笑。P相當(dāng)于業(yè)務(wù)邏輯+界面邏輯

2015年9月 4日 16:54|#|引用

葫蘆娃今晚打老虎說:

看到書的廣告了夫否,買了本書看看

2015年9月22日 21:26|#|引用

蔣鑫說:

mvc原則上model是不與view層交互的吧,model廣義上講不是單單的數(shù)據(jù)封裝而是承載了明確的業(yè)務(wù)邏輯處理叫胁,當(dāng)然可能只是簡單的網(wǎng)絡(luò)或數(shù)據(jù)庫存取凰慈。controller負(fù)責(zé)接受用戶交互指令,后對model進(jìn)行訪問驼鹅,之后組裝成view微谓,相當(dāng)于model與view之前的橋梁所以稱之為控制器森篷。

之所以讓model層負(fù)責(zé)更多的業(yè)務(wù),主要原因是遍于重構(gòu)豺型,代碼復(fù)用仲智,在一個(gè)view層經(jīng)常變更的場景下,controller相應(yīng)的也會變姻氨,但因?yàn)闃I(yè)務(wù)層獨(dú)立钓辆,可以保證做到最少的代碼變更。

上面提到的是經(jīng)典的web肴焊、app開發(fā)前联,至于現(xiàn)在的前端web mvc,以ember來說娶眷,我對它對controller的定義覺得區(qū)別于上面的蛀恩,更像是某種新的模式或反模式。

2015年9月23日 22:36|#|引用

ivy說:

好文章

2015年11月19日 19:29|#|引用

hanfei說:

MVP里茂浮,View可以直接訪問model双谆,View不能直接訪問model的是Application Model架構(gòu)

Application Model: Views hand off events to the presenter as they do to the application model. However the view may update itself directly from the domain model, the presenter doesn't act as a Presentation Model. Furthermore the presenter is welcome to directly access widgets for behaviors that don't fit into the Observer Synchronization.

詳見:http://martinfowler.com/eaaDev/uiArchs.html

2015年11月25日 16:53|#|引用

劉宇清說:

引用justNode的發(fā)言:

我比較認(rèn)同你的看法。不過博主這篇說的是前端mvc席揽,跟后端還是有很大區(qū)別的顽馋。 順便說一句,阮老師對于前端框架的很多觀點(diǎn)都是不妥當(dāng)?shù)模ㄗh看看寒冬那篇 UI架構(gòu)設(shè)計(jì)的演化

做開發(fā)三四年了幌羞,?前段寸谜、后端和IOS客戶端都有過一些開發(fā)經(jīng)驗(yàn),而且也經(jīng)常和團(tuán)隊(duì)里的其他成員交流開發(fā)心得属桦。綜合來看熊痴,大家對MVC的模型、視圖聂宾、控制器的概念都是一致的果善,只是由于在前后端和客戶端不同的開發(fā)場景下,有不同的側(cè)重點(diǎn)而已系谐。

比如前端主要是頁面展示和用戶交互巾陕,因此MVC中重點(diǎn)在視圖V,有些場景下承擔(dān)業(yè)務(wù)邏輯和交互的控制器C與視圖V完全放在了一起纪他,而模型M即與服務(wù)端交互的接口及瀏覽器本地的存儲操作則作為單獨(dú)的一部分鄙煤;后端開發(fā)就會有很大不同,尤其是只提供接口時(shí)茶袒,MVC中就會更側(cè)重模型M梯刚,視圖V概念則弱化為了對外開放的接口具體到實(shí)現(xiàn)上甚至就是一系列的接口列表,而控制器C則承擔(dān)接口的實(shí)現(xiàn)及部分服務(wù)端操作如定時(shí)任務(wù)等功能薪寓,成為較厚重的一層亡资,模型M承擔(dān)數(shù)據(jù)庫操作和從其他服務(wù)獲取數(shù)據(jù)的功能則作為第三層句喜;客戶端的MVC則一般都較為均衡,但是界面展示與業(yè)務(wù)邏輯很多時(shí)候還是會強(qiáng)綁定沟于,造成V與C結(jié)合在一起,例如純代碼開發(fā)IOS時(shí)植康,每個(gè)頁面的展示及交互邏輯分層很明顯旷太,但是就整個(gè)項(xiàng)目來說,視圖V并沒有形成單獨(dú)的一層销睁,是成為了控制器C層的一部分供璧。

因而,MVC也好冻记,MVP也好睡毒,MVVM也好,重要的是針對應(yīng)用場景和需求對M冗栗、V演顾、C三層進(jìn)行劃分,三層間的交互也是如此隅居。只要確定了架構(gòu)后遵循一定的原則钠至,在開發(fā)過程中盡量不破壞原有規(guī)則,直到現(xiàn)有的架構(gòu)規(guī)則不能滿足需求胎源,再重新制定棉钧。這樣應(yīng)該就能在滿足應(yīng)用場景需求的同時(shí),使得項(xiàng)目有明確清晰的層次涕蚤。在比較框架的定義和優(yōu)劣時(shí)宪卿,也要有一定的場景說明才有實(shí)際意義。

回到阮老師的總結(jié)万栅,個(gè)人感覺他是從廣義上對這些框架進(jìn)行講解的佑钾,我們在理解時(shí),應(yīng)該根據(jù)不同項(xiàng)目的實(shí)際情況進(jìn)行參照烦粒。大家在評論的時(shí)候最好說明是在什么樣的場景下框架的使用次绘,這樣也方便不同開發(fā)背景的同學(xué)學(xué)習(xí)。

2015年12月 5日 14:47|#|引用

Sinksfish說:

誰跟你說的MVC是單向的撒遣?

Model能直接操作View邮偎?Model是禁止操作View!

Controller就不能操作View义黎?Controller就是Model那取到數(shù)據(jù)再去操作View

2015年12月25日 11:00|#|引用

windsSunShine說:

引用Sinksfish的發(fā)言:

誰跟你說的MVC是單向的禾进?

Model能直接操作View?Model是禁止操作View廉涕!

Controller就不能操作View泻云?Controller就是Model那取到數(shù)據(jù)再去操作View

對啊我也是這樣認(rèn)為的

2015年12月30日 19:18|#|引用

cshenger說:

這樣理解的話艇拍,我覺得區(qū)分MVC與其他的區(qū)別是不是View和Model能不能直接通信,至于是單向還是雙向我倒是覺得是不是跟具體的業(yè)務(wù)有關(guān)宠纯?個(gè)人拙見卸夕,當(dāng)然阮老師寫的相當(dāng)清楚明白,謝謝

2016年1月12日 17:47|#|引用

daoren說:

我這兩天也特地去查mvc相關(guān)知識婆瓜,得到的點(diǎn)是:

1. 經(jīng)典MVC設(shè)計(jì)是給非web系統(tǒng)的快集,

2. MVC web框架其實(shí)不是真正的MVC設(shè)計(jì)模式,而是JSP Model2設(shè)計(jì)模式廉白。

參考:

http://stackoverflow.com/questions/1931335/what-is-mvc-in-ruby-on-rails

http://www.sitepoint.com/getting-started-with-mvc/

https://www.wikiwand.com/en/JSP_model_2_architecture

2016年2月24日 11:12|#|引用

落風(fēng)月說:

MVC的那個(gè)圖錯(cuò)了吧…m與v并不會直接交互

2016年3月10日 08:43|#|引用

kylelua說:

一派胡言个初。作者你懂mvc 嗎?猴蹂?院溺??model 和 view永遠(yuǎn)不可以有任何直接聯(lián)系磅轻。此乃mvc的最大忌諱珍逸。居然你一開頭開始就扯淡。

2016年3月24日 10:56|#|引用

公孫二狗說:

1. Web 的 MVC聋溜,Model 不知道 View 的存在

2. 而 Swing 等的 MVC弄息,View 里放了 Model(例如 JTable 里有 TableModel),Model 數(shù)據(jù)變化時(shí)觸發(fā)事件勤婚,View 會收到這個(gè)事件觸發(fā)更新操作

2016年4月12日 08:28|#|引用

Seanix說:

非常棒的講解, 對于新人很有幫助~! 謝謝博主~~~!

2016年5月 6日 17:06|#|引用

bounty說:

mvc 模式講錯(cuò)了摹量,阮老師,view發(fā)送指令給controller馒胆,controlle接受指令通知model層操作數(shù)據(jù)缨称,接著返回controller層,controller再渲染view祝迂。

2016年5月11日 10:58|#|引用

王大大說:

MVC 的 C 怎么回事業(yè)務(wù)邏輯呢?

2016年5月26日 16:09|#|引用

咚門說:

引用xuhong的發(fā)言:

這個(gè)是不同領(lǐng)域不一樣的睦尽,阮兄這說的應(yīng)該只是前端領(lǐng)域,不然會造成誤解型雳。對于后端以及ios等其他領(lǐng)域都是不適用的当凡。

。纠俭。沿量。我一直在嘗試跟我的后端經(jīng)驗(yàn)對應(yīng),沒想過這個(gè)冤荆。朴则。。

2016年5月31日 11:09|#|引用

panda說:

這個(gè)mvc和后端的mvc感覺不一樣啊钓简,本文說處理邏輯都在v層乌妒,不是應(yīng)該在m層嗎汹想?mvp和mvvm都基本沒說m層作用,一直在說v和c層之間關(guān)系撤蚊,不是很明白古掏。

2016年6月10日 12:29|#|引用

王凌永說:

清晰易懂 謝謝!

2016年6月13日 10:37|#|引用

is說:

圖掛了

2016年6月13日 22:15|#|引用

xgqfrms說:

被誤解的MVC和被神化的MVVM侦啸!

2016年7月 1日 23:24|#|引用

zhongHao說:

感覺好多人混淆了傳統(tǒng) MVC 跟 web MVC 的區(qū)別了,MVC 模式創(chuàng)建出來是為了 n-tier systems槽唾,當(dāng)然一開始不是用在 web 應(yīng)用上的,就如老師是說的匹中,我認(rèn)為并沒有錯(cuò)誤,web MVC 是后來的人把這種設(shè)計(jì)模式用于 web 應(yīng)用中豪诲,當(dāng)然是有區(qū)別的顶捷,當(dāng)然你問我區(qū)別是什么?還是問谷歌和度娘吧屎篱,本人還是個(gè)菜鳥服赎,歡迎指點(diǎn)。:)

2016年7月19日 01:07|#|引用

八爺說:

引用dreamers.yzy的發(fā)言:

MVC是單向的?不是V->C->M -> C -> V 嗎?

不一定交播,比如在android上重虑,activity既可以當(dāng)View,也可以當(dāng)Control秦士,那么他就很厚了缺厉,在mvp上,把他定義為view隧土,其實(shí)個(gè)人覺得提针,只要清晰易懂,用什么框架無所謂曹傀!

2016年8月24日 14:12|#|引用

AppDays說:

我覺得 MVC 和 MVVM 的本質(zhì)區(qū)別在于綁定辐脖,分層結(jié)構(gòu)上面我覺得大同小異

2016年8月29日 12:05|#|引用

心止如水說:

Android里的MVP感覺和當(dāng)年寫Java EE時(shí)候的MVC差不多,不同的是當(dāng)時(shí)的MVC接受請求的是C(Controller)皆愉,C負(fù)責(zé)加載數(shù)據(jù)與渲染視圖嗜价,MVP中V(View)接收請求通知Presenter加載數(shù)據(jù)再把數(shù)據(jù)渲染到V,不知道這樣理解對不幕庐。

2016年10月16日 23:53|#|引用

慕容玄說:

對于分層久锥,非常不理解為什么要搞這么多名堂,有誰能告訴我VM層比C多了什么异剥?多的那些在以前沒有MVVM的時(shí)候奴拦,是不是很多程序員也會把這些內(nèi)容寫到C?總體的思想難道不還是數(shù)據(jù)届吁、試圖错妖、控制么绿鸣?樓主的做法更讓我費(fèi)解,我從05年開始學(xué)MVC的時(shí)候開始暂氯,就沒有哪個(gè)老師或者哪份資料里規(guī)定過說MVC的通信必須走單項(xiàng)或者雙向潮模,考通信方式來劃分,是否不倫不類痴施?難道我們說的接口不是分層而是通信么擎厢?

2016年11月17日 17:32|#|引用

必富客說:

MVC錯(cuò)了,改改辣吃。

2016年11月25日 08:29|#|引用

AAA說:

好多人說文章的MVC錯(cuò)了.說M不能和V通信.是不是你們接觸的MVC不一樣?

文章中的MVC是對的.V -> C -> M -> V , MV之間其實(shí)是一個(gè)Observer模式,M 本身作為一個(gè)事件派發(fā)器,V 注冊監(jiān)聽M的事件,當(dāng)M 被C 改變時(shí),拋出DataChanged事件+數(shù)據(jù),V收到事件后去更新控件上的數(shù)據(jù).

可能游戲編程和web編程不一樣吧.

2017年1月10日 21:15|#|引用

gcc說:

一本正經(jīng)的胡說八道动遭,mvc說得根本不對。

2017年1月14日 13:55|#|引用

陸一峰說:

這些說發(fā)我真是無法認(rèn)同的呀.

2017年2月15日 10:20|#|引用

kylesean說:

后端 mvc 中的 v 是前端 mvc 的全部神得。速途同歸厘惦,看你從什么角度理解。mvp 或 mvvm 都是對前端 mvc 的重新定義哩簿,更細(xì)化了點(diǎn)而已宵蕉。

2017年3月 6日 16:44|#|引用

無名菜鳥說:

引用kylesean的發(fā)言:

后端 mvc 中的 v 是前端 mvc 的全部。速途同歸节榜,看你從什么角度理解羡玛。mvp 或 mvvm 都是對前端 mvc 的重新定義,更細(xì)化了點(diǎn)而已宗苍。

看了這條評論稼稿,略有感悟。

前后端現(xiàn)在感覺各自成一派讳窟,也許未來再有什么新的設(shè)計(jì)模式時(shí)渺杉,能讓前后端的人坐在一起共同設(shè)計(jì),而不是各自為政挪钓。

2017年3月22日 15:49|#|引用

semmy說:

引用dreamers.yzy的發(fā)言:

MVC是單向的?不是V->C->M -> C -> V 嗎?

我也覺得MVC是這樣的是越。我之前做java服務(wù)端開發(fā),一般就是view請求到Ctroller碌上,Ctroller再調(diào)用業(yè)務(wù)Model(Service層)倚评,Service處理完返回給Ctroller,然后Ctrooler再響應(yīng)View馏予。所以我也極大不理解為什么MVC是單向的天梧。我反而覺得是 VCM

2017年4月10日 20:32|#|引用

xxx說:

現(xiàn)在在自己寫,發(fā)現(xiàn)問題好多,前端的耦合太多啦,單一入口應(yīng)用,后臺只負(fù)責(zé)提供數(shù)據(jù)接口和html片段,前斷負(fù)責(zé)渲染界面,綁定交互事件,與后端通信等等,越理越亂。

2017年4月25日 17:08|#|引用

耿鵬說:

阮老師~好氣啊霞丧。我論文明明引用的是您的文章呢岗,結(jié)果在中國知網(wǎng)查重,查了一堆小網(wǎng)站的人,我看了下時(shí)間后豫,他們都是抄襲您的悉尾。。挫酿。您有空构眯,找知網(wǎng)理論!T绻辍惫霸!

2017年5月12日 19:54|#|引用

月亮樹說:

該怎么理解“接受用戶指令時(shí),MVC 可以分成兩種方式”葱弟?

在我看來壹店,接受用戶指令向來就是controller的事情,controller在絕大多數(shù)的情景下都是充當(dāng)view和model的膠水層芝加。

2017年6月15日 12:54|#|引用

Choclatl說:

感覺MVC模式不同地方有很多不同的理解硅卢,我現(xiàn)在看的那本Spine的書說的MVC模式接近圖中的MVP模式,View和Model層沒有關(guān)聯(lián)妖混,之間的通訊都是通過Controller實(shí)現(xiàn)的老赤。

2017年7月22日 11:58|#|引用

Young說:

阮老師講的真的很透徹

2017年8月 3日 13:34|#|引用

liby說:

我想說一句轮洋,后端的框架類似于python的django或者java的SSH是MVP類型的制市,在MVC上面延伸出來的,presenter其實(shí)也是controller弊予,只不過名字不一樣祥楣,所以大家說的mvc的v-c-m-c-v其實(shí)是mvp的v-p-m-p-v才對.

阮老師說的是適用于前后端的,這并沒有錯(cuò)誤汉柒!

2017年8月 3日 18:09|#|引用

沐風(fēng)待雨說:

引用那誰的發(fā)言:

我是搞web后臺的误褪,我對MVC的理解是:

M=數(shù)據(jù)對象+數(shù)據(jù)訪問+業(yè)務(wù)邏輯,必要時(shí)可以分層

C=路由+視圖邏輯

V=視圖碾褂,如果是接口開發(fā)這層可以不要

Fat model, thin controller

是不是不同的軟件對MVC的理解不同兽间?

C應(yīng)該也有一些業(yè)務(wù)邏輯,其他的和你看法一樣正塌,話說業(yè)務(wù)邏輯到底放在那里好呢

2017年8月21日 20:17|#|引用

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末嘀略,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子乓诽,更是在濱河造成了極大的恐慌帜羊,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,427評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鸠天,死亡現(xiàn)場離奇詭異讼育,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評論 3 395
  • 文/潘曉璐 我一進(jìn)店門奶段,熙熙樓的掌柜王于貴愁眉苦臉地迎上來饥瓷,“玉大人,你說我怎么就攤上這事忧饭】肝椋” “怎么了笤喳?”我有些...
    開封第一講書人閱讀 165,747評論 0 356
  • 文/不壞的土叔 我叫張陵礼患,是天一觀的道長。 經(jīng)常有香客問我篙梢,道長吼砂,這世上最難降的妖魔是什么逆航? 我笑而不...
    開封第一講書人閱讀 58,939評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮渔肩,結(jié)果婚禮上因俐,老公的妹妹穿的比我還像新娘。我一直安慰自己周偎,他們只是感情好抹剩,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蓉坎,像睡著了一般澳眷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蛉艾,一...
    開封第一講書人閱讀 51,737評論 1 305
  • 那天钳踊,我揣著相機(jī)與錄音,去河邊找鬼勿侯。 笑死拓瞪,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的助琐。 我是一名探鬼主播祭埂,決...
    沈念sama閱讀 40,448評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼兵钮!你這毒婦竟也來了蛆橡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,352評論 0 276
  • 序言:老撾萬榮一對情侶失蹤矢空,失蹤者是張志新(化名)和其女友劉穎航罗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體屁药,經(jīng)...
    沈念sama閱讀 45,834評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粥血,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片复亏。...
    茶點(diǎn)故事閱讀 40,133評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡趾娃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出缔御,到底是詐尸還是另有隱情抬闷,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評論 5 346
  • 正文 年R本政府宣布耕突,位于F島的核電站笤成,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏眷茁。R本人自食惡果不足惜炕泳,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望上祈。 院中可真熱鬧培遵,春花似錦、人聲如沸登刺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纸俭。三九已至皇耗,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掉蔬,已是汗流浹背廊宪。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評論 1 272
  • 我被黑心中介騙來泰國打工矾瘾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留女轿,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,398評論 3 373
  • 正文 我出身青樓壕翩,卻偏偏與公主長得像蛉迹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個(gè)殘疾皇子放妈,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評論 2 355

推薦閱讀更多精彩內(nèi)容