引言:認真學習了下廣義MVC模式下前端怎麼寫,狹義的MVC實際上是有一個變化過程:MVC MVP MVVM,網上看了不少的關於這方面的介紹,之前老是將視圖數據邏輯寫一個模塊,最近嘗試分開並用組件式的開發的方式...javascript
MVC是模型(Model)-視圖(View)-控制器(Controller)的縮寫,是設計模式中最經常使用的軟件架構。html
視圖(View):用戶界面。
控制器(Controller):業務邏輯
模型(Model):數據保存前端
全部方式都是單向通訊:vue
MVC簡化模型java
//頁面加載後建立MVC對象 $(function(){ //建立MVC對象 var MVC=MVC||{}; //初始化MVC數據模型層 MVC.model=function(){}(); //初始化MVC視圖層 MVC.view=function(){}(); //初始化MVC控制器層 MVC.controller=function(){}(); });
//MVC數據模型層 MVC.model=function(){ //內部數據對象 var M={}; //服務器端獲取數據,一般經過Ajax獲取並存儲 M.data={}; //配置數據 M.config={}; return { //獲取服務器端數據 getData:function(m){ return M.data[m]; }, //獲取配置數據 getConfig:function(c){ //根據數據字段獲取數據 return M.config[c] }, //設置服務器數據 setData:function(m,v){ M.data[m]=v; return this; }, //設置配置數據 setConfig:function(c,v){ M.data[c]=v; return this; } }; }();
//MVC視圖層 MVC.view=function(){ //模型數據層對象操做方法引用 var M=MVC.model; //內部視圖建立方法對象 var V={}; //獲取視圖的接口方法 return function(v){ //根據視圖名詞返回視圖 V[v](); } }();
//MVC控制器層 MVC.controller=function(){ //模型數據層對象操做方法引用 var M=MVC.model; //視圖數據層對象操做方法引用 var V=MVC.view; //控制器建立方法對象 var C={}; }();
MVP是Model-View-Presenter,即將MVC中的控制器Controller換成了Presenter負責邏輯的處理。react
MVC和MVP的區別是:在MVP中View並不直接使用Model,它們之間的通訊是經過Presenter (MVC中的Controller)來進行的,全部的交互都發生在Presenter內部,而在MVC中View會直接從Model中讀取數據而不是經過 Controller。git
各部分之間都是雙向通訊:github
MVVM是Model-View-ViewModel,和MVP的區別在於Presenter換成了ViewModel負責邏輯處理。設計模式
MVVM的優勢是低耦合、可重用性、獨立開發。服務器
雙向綁定(data-binding):
後面會詳細介紹MVVM的設計模式架構,同時會有針對於react和vue之類MVVM框架的原理。
參考文章: