MVC与MVVM框架
什么是MVC?
MVC思想:Controller負責將Model的數(shù)據(jù)用View顯示出來。
Model:處理數(shù)據(jù)邏輯的部分,負責在數(shù)據(jù)庫中存儲數(shù)據(jù)。
View:處理數(shù)據(jù)的顯示部分
Controller:是應用程序的交互部分,通常控制器負責從視圖中讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。
Controller是MVC中數(shù)據(jù)和視圖的協(xié)調者,也就是Controller里面把Model的數(shù)據(jù)賦值給view來實現(xiàn),或者是View接收用戶輸入的數(shù)據(jù)然后由Controller把這些數(shù)據(jù)傳給Model來保存到本地或者上傳到服務器。
通信流程:
(1)View接收用戶傳入的數(shù)據(jù),傳送指令到Controller
(2)Controller完成業(yè)務邏輯后,要求Model改變狀態(tài)
(3)Model將新的數(shù)據(jù)發(fā)送到View,用戶得到反饋
所有通信都是單向的。
在MVC中,view是可以直接訪問model的,從而view里會包含model的信息, 不可避免的還要包含一些業(yè)務邏輯。MVC關注的是Model的不變,所以在MVC模型中,Model不依賴于View,但是View是依賴于Model的。不僅如此,因為有一些業(yè)務邏輯在View里實現(xiàn)了,導致要更新View也是比較困難的,至少業(yè)務邏輯是無法重用的。
?
什么是MVVM?MVVM是Model-View-ViewModel的縮寫。
MVVM最早由微軟提出來,它借鑒了桌面應用程序的MVC思想,在前端頁面中,把Model用純JavaScript對象表示,View負責顯示,兩者做到了最大限度的分離。
MVVM是將其中view的狀態(tài)和行為抽象化,讓我們將視圖UI和業(yè)務邏輯分開,當然這些事viewModel已經(jīng)幫我們做了,它可以取出model的數(shù)據(jù)同時幫忙處理view中由于需要展示內容而涉及的業(yè)務邏輯。
它采用雙向綁定:View的變動自動反映在ViewModel,反之亦然。
把Model和View關聯(lián)起來的就是ViewModel。ViewModel負責把Model的數(shù)據(jù)同步到View顯示出來,還負責把View的修改同步回Model。
一個MVVM框架和jQuery操作DOM相比有什么區(qū)別?
我們先看用jQuery實現(xiàn)的修改兩個DOM節(jié)點的例子:
<!-- HTML --> <p>Hello, <span id="name">Bart</span>!</p> <p>You are <span id="age">12</span>.</p>Hello, Bart!
You are 12.
用jQuery修改name和age節(jié)點的內容:
var name = 'Homer';
var age = 51;
$('#name').text(name);
$('#age').text(age);
如果我們使用MVVM框架來實現(xiàn)同樣的功能,我們首先并不關心DOM的結構,而是關心數(shù)據(jù)如何存儲。最簡單的數(shù)據(jù)存儲方式是使用JavaScript對象:
var person = {name: 'Bart',age: 12 };我們把變量person看作Model,把HTML某些DOM節(jié)點看作View,并假定它們之間被關聯(lián)起來了。
要把顯示的name從Bart改為Homer,把顯示的age從12改為51,我們并不操作DOM,而是直接修改JavaScript對象:
person.name = 'Homer';
person.age = 51;
執(zhí)行上面的代碼,我們驚訝地發(fā)現(xiàn),改變JavaScript對象的狀態(tài),會導致DOM結構作出對應的變化!這讓我們的關注點從如何操作DOM變成了如何更新JavaScript對象的狀態(tài),而操作JavaScript對象比DOM簡單多了!
這就是MVVM的設計思想:關注Model的變化,讓MVVM框架去自動更新DOM的狀態(tài),從而把開發(fā)者從操作DOM的繁瑣步驟中解脫出來!
轉載于:https://www.cnblogs.com/xiaoan0705/p/8939669.html
總結
以上是生活随笔為你收集整理的MVC与MVVM框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大型分布式C++框架《四:netio之请
- 下一篇: Monkey Server自动化脚本