前端架构:MVC以及MVVM MVP介绍

mvc

Model-View-Controller(模型-视图-控制器):用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑.它强制性的使应用程序的输入、处理和输出分开。最典型的MVC就是JSP +servlet+javabean的模式。

MVP

Model-View-Presenter:是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示。作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller。

MVVM

Model-View-ViewModel:和MVC模式一样,主要目的是分离视图(View)和模型(Model);在概念上是真正将页面与数据逻辑分离的模式,在开发方式上,它是真正将前台代码开发者(JS+HTML)与后台代码开发者分离的模式(asp,asp.net,php,jsp)。

1. 低耦合。视图(View)可以独立于Model变化和修改,一个ViewModel可以绑定到不同的"View"上,当View变化的时候Model可以不变,当Model变化的时候View也可以不变。
2. 可重用性。你可以把一些视图逻辑放在一个ViewModel里面,让很多view重用这段视图逻辑。
3. 独立开发。开发人员可以专注于业务逻辑和数据的开发(ViewModel),设计人员可以专注于页面设计,使用Expression Blend可以很容易设计界面并生成xaml代码。
4. 可测试。界面素来是比较难于测试的,而现在测试可以针对ViewModel来写。

更多关于架构介绍:http://www.cnblogs.com/lori/p/3552571.html

下面从一个简单的页面实例讲讲mvc模式的使用:

1首先我们有最简洁直白的页面的写法(view model 和control完全混合)

<html>
<head>
<title> example </title>
</head>
<body>
<input type="button" value="baidu" onclick="alert(this.value);"/>
</body>
</html>

虽然简单直接但是页面代码量变大时需要修改js代码将会使整个页面变得很混乱,不易维护;类似于jsp中直接嵌入java语句;

2、将js代码与html代码适当的分离:(view和model,control在同一页面适当分离)

<html>
<head>
<title> example </title>
</head>
<body>
<input type="button" value="baidu" onclick="tipInfo(this);"/>
<script language="JavaScript">
    function tipInfo(o){
           alert(o.value);
    }
</script>
</body>
</html>

这是将js中的操作放到script脚本标签中,使得js逻辑代码相对集中,易于后期修改。但是我们还是会在html页面混着有对js函数的调用,依旧没有分离;

3.讲html和js彻底分离(view 和 model control完全分离):

<html>
<head>
<title> example </title>
</head>
<body>
<input type="button" value="baidu"/>
<script src="example.js"></script>
</body>
</html>

 //分离出来的模型model和控制control的综合example.js代码:
    var o = document.getElementById("baidu");
    o.onclick = function(){
           alert(this.value);
    }

此时button节点的操作和时间注册等工作已经完全与html页面分离,但是control和model还混合在一起,所以还不是一个基于mvc的模式;类似于jsp中的javabean实现类似;

4.符合mvc的框架:(model,view,control完全分离)

<html>
<head>
<title> example </title>
</head>
<body>
<input type="button" value="baidu"/>
<script src="model.js"></script>
<script src="control.js"></script>
</body>
</html>

//control.js
function getObj(id){
  return document.getElementById(id);
}
var ui=new Object();
ui.register=funtion(id,even,fun,arr){
  if(getObj(id)){
        getObj(id)["on"+even]=funtcion(){
             fun(arr);
        }
  }
}
ui.register("baidu","click",tipInfo;[1,2]);
/*
           第一参数:为button节点id
           第二参数:为需要注册的触发事件
           第三参数:事件触发函数
           第四参数:需要传递的参数。
*/
/*

 说明:control.js的代码就是实现html页面节点事件的注册。使得节点的各种事件知道会触发什么函数去执行。
         具体的函数操作,可以放到model模块中执行,在model中,才是真正处理逻辑操作

*/

//model.js
function tipInfo(arr){
  alert(arr[1]);
  //实现其他组件功能,例如popup、form等。都属于model模型
}

以上模式就类似于jsp中的struts框架,Struts标签的实现方式。

总结:

    View:只管页面的显示和样式展示。

Control:进行页面节点事件的注册和控制,以及页面加载性能的实现(例如方荣的硬盘缓存)。

Model:真正的逻辑处理,例如jslib库中的form、popup、drag等功能组件都属于model模块。

时间: 2024-12-21 00:15:54

前端架构:MVC以及MVVM MVP介绍的相关文章

前端开发MVC与MVVM的区别

MVC的定义:MVC是Model-View- Controller的简写. 即模型-视图-控制器.M和V指的意思和MVVM中的M和V意思一样.C即Controller指的是页面业务逻辑. 使用MVC的目的就是将M和V的代码分离. ‘MVC是单向通信.也就是View跟Model,必须通过Controller来承上启下. MVC和MVVM的区别并不是VM完全取代了C,ViewModel存在目的在于抽离Controller中展示的业务逻辑. 而不是替代Controller,其它视图操作业务等还是应该放

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

MVP 是从经典的模式MVC演变而来,它们的基本思想有相通的地方:Controller/Presenter负责逻辑的处理,Model提供数据,View负 责显示.作为一种新的模式,MVP与MVC有着一个重大的区别:在MVP中View并不直接使用Model,它们之间的通信是通过Presenter (MVC中的Controller)来进行的,所有的交互都发生在Presenter内部,而在MVC中View会从直接Model中读取数据而不是通过 Controller. 在MVC里,View是可以直接访问

前端mvc与mvvm

框架与库的最大区别就是代码的风格确认,库只是页面级别的选择,而架构则关注于整个程序的设计 MVC 作为软件中的99口诀,软件设计要是没个mvc就好像不是正规军一样,前端也是这样,将html理解为view,js理解为controller,js的通讯(主要指ajax)交互理解为model的获取,那么前端就是一个标准的mvc架构,其写法大致是这样的 html/view: <button class="btn btn-info" id='save'>提交</button>

探索从 MVC 到 MVVM + Flux 架构模式的转变

本文首发于 my blog 在业务中一般 MVVM 框架一般都会配合上数据状态库(redux, mobx 等)一起使用,本文会通过一个小 demo 来讲述为什么会引人数据状态库. 从 MVC 到 MVVM 模式说起 传统 MVC 架构(如 JSP)在当今移动端流量寸土寸金的年代一个比较头疼的问题就是会进行大量的全局重复渲染.但是 MVC 架构是好东西,其对数据.视图.逻辑有了清晰的分工,于是前端 MVC 框架(比如 backbone.js) 出来了,对于很多业务规模不大的场景,前端 MVC 框架

没有最好,选择最适合自己的前端架构

前端框架不断推新,众多IT企业都面临着"如何选择框架","是否需要再造轮子"的抉择.去哪儿网前端架构师司徒正美分析了各主流行框架优劣点.适用场景,并针对不同规模的公司.项目给出了相应的前端技术选择方案. 最近几年,前端技术迅猛发展,差不多每年都会冒出一款主流的框架. 每次新开业务线或启动新项目时,首先第一件事就是纠结:使用什么框架,重造什么轮子?我很高兴应CSDN的邀请谈我的看法. RequireJS,前端技术发展分水岭 在五六年前,移动端还没有兴起,我们没有什么选

用“MEAN”技术栈开发web应用(一)AngularJs前端架构

前言 不知何时突然冒出“MEAN技术栈”这个新词,听起来很牛逼的样子,其实就是我们已经熟悉了的近两年在前端比较流行的技术,mongodb.express.angularjs.nodejs,由于这几项技术涵盖了从前端到后端再到数据库,可以用他们完整的开发一个web应用了,所以成了一个非常牛逼的组合,颇有当年LAMP的气势.前端要从切图仔迈向全栈的路上,这几门技术必须得有所涉猎.本系列文章利用自己虚构的一个小项目为例,对“使用MEAN技术栈开发web应用”做一个入门级的介绍. AngularJs的争

Android架构(一)MVP全解析

前言 关于架构的文章,博主很早就想写了,虽说最近比较流行MVVM,但是MVP以及MVC也没有过时之说,最主要还是要根据业务来选择合适的架构.当然现在写MVP的文章很多,也有很多好的文章,但是大多数看完后还是一头雾水,用最少的文字表述清楚是我一贯的风格(这里小小的装逼一下),所以还是自己总结比较靠谱. 1.回顾MVC 讲到MVP前我们有必要回顾下MVC,MVC(Model-View-Controller,模型-视图-控制器)模式是80年代Smalltalk-80出现的一种软件设计模式,后来得到了广

【PC网站前端架构探讨系列】关于中小型PC网站前端架构方案的讨论与实践

 说在前面 好几天没更新这个系列文章了,这段时间还是在研究这块东西,遇到的各种奇葩问题,最后写完,只是调试就花了两天,果然发现在和大神之间的距离越来越远,在加上大部分时间在追求自己的梦想,梦想同样也是遥遥无期啊!一直在思考星星的那句话,人到底该不该追求梦想,做个咸鱼到底好不好的,吃吃喝喝睡睡的,反正最近感悟挺多,抽时间写个文章,好好和大家聊聊,把我的心里话告诉大家,程序员不容易,寻梦者更难啊!比如,这个所谓的pc网站的前端框架,这对一个做后台而且还是多年一直在做C#.JAVA没怎么写脚本的我来说

如何挑选适合的前端框架(去哪儿网前端架构师司徒正美)

前端框架不断推新,众多IT企业都面临着"如何选择框架","是否需要再造轮子"的抉择.去哪儿网前端架构师司徒正美分析了各主流行框架优劣点.适用场景,并针对不同规模的公司.项目给出了相应的前端技术选择方案. 最近几年,前端技术迅猛发展,差不多每年都会冒出一款主流的框架. 每次新开业务线或启动新项目时,首先第一件事就是纠结:使用什么框架,重造什么轮子?我很高兴应CSDN的邀请谈我的看法. RequireJS,前端技术发展分水岭 在五六年前,移动端还没有兴起,我们没有什么选