學習設計模式之MVC、MVP、MVVM


引言:認真學習了下廣義MVC模式下前端怎么寫,狹義的MVC其實是有一個變化過程:MVC MVP MVVM,網上看了很多的關於這方面的介紹,以前總是將視圖數據邏輯寫一個模塊,最近嘗試分開並用組件式的開發的方式...

MVC

MVC是模型(Model)-視圖(View)-控制器(Controller)的縮寫,是設計模式中最常用的軟件架構。

視圖(View):用戶界面。
控制器(Controller):業務邏輯
模型(Model):數據保存

所有方式都是單向通信:

  • View 接受用戶交互請求
  • View 將請求轉交給Controller處理
  • Controller 操作Model進行數據更新保存
  • 數據更新保存之后,Model會通知View更新
  • View 更新變化數據使用戶得到反饋

MVC簡化模型

//頁面加載后創建MVC對象
$(function(){
    //創建MVC對象
    var MVC=MVC||{};
    //初始化MVC數據模型層
    MVC.model=function(){}();
    //初始化MVC視圖層
    MVC.view=function(){}();
    //初始化MVC控制器層
    MVC.controller=function(){}();
});
  1. MVC數據模型層
//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;
    	}
    };
}();

  1. MVC視圖層
//MVC視圖層
MVC.view=function(){
	//模型數據層對象操作方法引用
	var M=MVC.model;
	//內部視圖創建方法對象
	var V={};
	//獲取視圖的接口方法
	return function(v){
		//根據視圖名詞返回視圖
		V[v]();
	}
}();
  1. MVC控制器層
//MVC控制器層
MVC.controller=function(){
	//模型數據層對象操作方法引用
	var M=MVC.model;
	//視圖數據層對象操作方法引用
	var V=MVC.view;
	//控制器創建方法對象
	var C={};
}();

MVP

MVP是Model-View-Presenter,即將MVC中的控制器Controller換成了Presenter負責邏輯的處理。

MVC和MVP的區別是:在MVP中View並不直接使用Model,它們之間的通信是通過Presenter (MVC中的Controller)來進行的,所有的交互都發生在Presenter內部,而在MVC中View會直接從Model中讀取數據而不是通過 Controller。

各部分之間都是雙向通信:

  • View 接收用戶交互請求
  • View 將請求轉交給 Presenter
  • Presenter 操作Model進行數據更新
  • Model 通知Presenter數據發生變化
  • Presenter 更新View數據

MVVM

MVVM是Model-View-ViewModel,和MVP的區別在於Presenter換成了ViewModel負責邏輯處理。

MVVM的優點是低耦合、可重用性、獨立開發。

雙向綁定(data-binding):

  • View 接收用戶交互請求
  • View 將請求轉交給ViewModel
  • ViewModel 操作Model數據更新
  • Model 更新完數據,通知ViewModel數據發生變化
  • ViewModel 更新View數據

后面會詳細介紹MVVM的設計模式架構,同時會有針對於react和vue之類MVVM框架的原理。

參考文章:

  1. MVC,MVP 和 MVVM 的圖示
  2. mvc、mvp、mvvm使用關系總結

原文鏈接:https://github.com/junhey/studyNotes/issues/21


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM