Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

学习设计模式之MVC、MVP、MVVM #41

Open
junhey opened this issue Aug 11, 2017 · 3 comments
Open

学习设计模式之MVC、MVP、MVVM #41

junhey opened this issue Aug 11, 2017 · 3 comments

Comments

@junhey
Copy link
Owner

junhey commented Aug 11, 2017

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使用关系总结
@junhey junhey changed the title 了解并学习设计模式之MVC、MVP、MVVM 学习设计模式之MVC、MVP、MVVM Aug 11, 2017
@Nitromethane
Copy link

严格的说:MVC 、MVVM、MVP都不属于设计模式;

@nighthere
Copy link

@Nitromethane 属于程序设计吗?

@junhey
Copy link
Owner Author

junhey commented Aug 13, 2017

@Nitromethane 设计模式也分大类的,这一类属于架构型设计模式,不同角度的叫法不同,这一类的有很多,具体应该以这个https://en.wikipedia.org/wiki/Software_design_pattern为标准

@junhey junhey transferred this issue from junhey/studyNotes Jul 2, 2021
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants