一、MVC MVC模式再網(wǎng)上的爭(zhēng)議是最大的,一些博客中是這樣描述的 MVC模式的通信是單向的,View觸發(fā)事件或數(shù)據(jù)的提交,到了Controller進(jìn)行處理邏輯之后,返回Model給View,View再?gòu)腗odel中取出數(shù)據(jù),當(dāng)然View中也會(huì)有相應(yīng)的邏輯。個(gè)人認(rèn)為這樣的描述算是比較正確,讓我們來(lái)看看ASP.NET Core MVC項(xiàng)目中是如何處理的,在默認(rèn)模板中的錯(cuò)誤界面是這樣的 它的數(shù)據(jù)來(lái)自于Model,并且在Razor界面中做了部分的邏輯處理。那么Model是從哪里來(lái)的呢? 在HomeController中有一個(gè)Error方法,它返回的便是一個(gè)View,這個(gè)View中帶著一個(gè)Model。由此看來(lái)在微軟定義的MVC中View確實(shí)是依賴于Model的 那么就有人說(shuō),這個(gè)Model不是Controller返回的嗎,那View和Model并沒(méi)有直接通信呀,MVC就是為了View和Model分離開(kāi)。 1.當(dāng)然我不否認(rèn)這種說(shuō)法,但我更偏向于前者??梢钥闯鰜?lái)Controller返回的是整個(gè)Model,并不是將Model拆分開(kāi)來(lái)依次解析后返回給View,所以我覺(jué)得既然Model的數(shù)據(jù)邏輯是在View界面自己處理的,那為什么非要不承認(rèn)他們之間有直接的依賴關(guān)系呢? 2.也可以理解一下第二種說(shuō)法,第二種說(shuō)法觀點(diǎn)在于V-C-M-C-V這種走向,這種說(shuō)法表示View中的Model是由Controller返回的,那么View和Model之間并沒(méi)有直接聯(lián)系。我認(rèn)為這樣的話MVC模式更偏向于MVP模式了,那么MVP唯一的進(jìn)步就是,徹底簡(jiǎn)化了View層,將View對(duì)Model的處理邏輯全部移動(dòng)到Controller(Presenter),由Presenter給View中的控件賦值。如下圖: 3.從整體一個(gè)項(xiàng)目來(lái)看,MVC模式更加偏向于一個(gè)后端或者是整個(gè)項(xiàng)目的分層結(jié)構(gòu),而MVP和MVVM則是借鑒了MVC的分層,將前端的部分進(jìn)行分層。 |
|