引言:认真学习了下广义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

学习设计模式之MVC、MVP、MVVM的更多相关文章

  1. 浅析前端开发中的 MVC/MVP/MVVM 模式

    MVC,MVP和MVVM都是常见的软件架构设计模式(Architectural Pattern),它通过分离关注点来改进代码的组织方式.不同于设计模式(Design Pattern),只是为了解决一类 ...

  2. [转]MVVM架构~mvc,mvp,mvvm大话开篇

    MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一 ...

  3. 前端mvc mvp mvvm 架构介绍(vue重构项目一)

    首先 我们为什么重构这个项目 1:我们现有的技术是前后台不分离,页面上采用esayUI+jq构成的单页面,每个所谓的单页面都是从后台胜场的唯一Id 与前端绑定,即使你找到了那个页面元素,也找不到所在的 ...

  4. Android App的设计架构:MVC,MVP,MVVM与架构经验谈

    相关:http://www.cnblogs.com/wytiger/p/5996876.html 和MVC框架模式一样,Model模型处理数据代码不变在Android的App开发中,很多人经常会头疼于 ...

  5. Android App的设计架构:MVC,MVP,MVVM与架构AAAAA

    1. 架构设计的目的1.1 通过设计使程序模块化,做到模块内部的高聚合和模块之间的低耦合.1.2 这样做的好处是使得程序在开发的过程中,开发人员只需要专注于一点,提高程序开发的效率,并且更容易进行后续 ...

  6. MVC, MVP, MVVM比较以及区别(上)

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  7. android MVC && MVP && MVVM分析和对比

    相关:http://www.cnblogs.com/wytiger/p/5305087.html 出处http://blog.csdn.net/self_study,对技术感兴趣的同鞋加群544645 ...

  8. MVC, MVP, MVVM比较以及区别

    MVC, MVP和MVVM都是用来解决界面呈现和逻辑代码分离而出现的模式.以前只是对它们有部分的了解,没有深入的研究过,对于一些里面的概念和区别也是一知半解.现在一边查资料,并结合自己的理解,来谈一下 ...

  9. [1] MVC & MVP &MVVM

    开发架构之MVC & MVP & MVVM  

随机推荐

  1. (转载)Jython 简单入门

    转载链接:http://willzh.iteye.com/blog/307222 1. 用Jython调用Java类库 第一步.创建Java类 写一个简单的Java类,用Point来示例: impor ...

  2. 使用C#创建SQLite桌面应用程序

    本文属于原创,转载请注明出处,谢谢! 一.开发环境 操作系统:Windows 10 X64 开发环境:VS2015 编程语言:C# .NET版本:.NET Framework 4.0 目标平台:X86 ...

  3. Wiser的Junit测试用法

    package org.jbpm.process.workitem.email; import static org.junit.Assert.assertEquals; import static ...

  4. 全网首创ISE入门级教程

    转眼间我已经大三了,现在成为了实验室的负责人,对于下一届学生的纳新重任就交到了我的手上,想采取不同的方法暑假尽可能对他们进行一些培训,所以制作了此教程,说实话,在网上还没有找到关于ISE的入门级使用教 ...

  5. CentOS 6.5 下安装 Redis 2.8.7(转载)

    wget http://download.redis.io/redis-stable.tar.gz tar xvzf redis-stable.tar.gz cd redis-stable make ...

  6. java多线程系列(三)---等待通知机制

    等待通知机制 前言:本系列将从零开始讲解java多线程相关的技术,内容参考于<java多线程核心技术>与<java并发编程实战>等相关资料,希望站在巨人的肩膀上,再通过我的理解 ...

  7. Python进阶——笔记1

    1.*args 的用法 *args 和 **kwargs 主要用于函数定义. 你可以将不定数量的参数传递给一个函数. 这里的不定的意思是:预先并不知道, 函数使用者会传递多少个参数给你, 所以在这个场 ...

  8. (转)sql通配符

    背景:一次搞清sql查询中的通配符问题. 1 sql通配符 通配符主要以下几种:%._.[].[^] . 在搜索数据库中的数据时,SQL 通配符可以替代一个或多个字符.SQL 通配符必须与 LIKE ...

  9. (转)springMVC框架下JQuery传递并解析Json数据

    springMVC框架下JQuery传递并解析Json数据 json作为一种轻量级的数据交换格式,在前后台数据交换中占据着非常重要的地位.Json的语法非常简单,采用的是键值对表示形式.JSON 可以 ...

  10. 【Owin 学习系列】2. Owin Startup 类解析

    Owin Startup 类解析 每个 Owin 程序都有 startup 类,在这个 startup 类里面你可以指定应用程序管道模型中的组件.你可以通过不同的方式来连接你的 startup 类和运 ...