1>基本知识:
MVC模式把软件系统分为三个基本部分:
View:视图,用户界面。它只是作为一种输出数据并允许用户操纵的方式。
Controller控制器,业务逻辑。接受用户的输入并调用模型和视图去完成用户的需求
Model:模型,数据保存
所有通信都是单向的。每一部分都相对独立,职责单一,在实现过程中可以专注于自身的核心逻辑。
2>MVC的优点
1.低耦合性
视图层和业务层分离,这样就允许更改视图层代码而不用重新编译模型和控制器代码。因为模型与控制器和视图相分离,所以很容易改变应用程序的数据层和业务规则。
2.高重用性和可适用性
例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3.较低的生命周期成本
MVC使开发和维护用户接口的技术含量降低。
4.快速的部署
使用MVC模式使开发时间得到相当大的缩减,它使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HTML和JSP开发人员)集中精力于表现形式上。
5.可维护性
分离视图层和业务逻辑层也使得WEB应用更易于维护和修改。
6.有利于软件工程化管理
由于不同的层各司其职,每一层不同的应用具有某些相同的特征,有利于通过工程化、工具化管理程序代码。
3>缺点
1.视图与控制器间的过于紧密的连接
视图与控制器是相互分离,但却是联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
2.视图对模型数据的低效率访问
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。对未变化数据的不必要的频繁访问,也将损害操作性能。
3.不太友好的单元测试
特别是App上做单元测试的时候很多东西依赖与系统框架,没法脱离用户接口来试这些逻辑单元.
4>实例
例如 需要给一个页面上的button注册一个onclick事件。
符合MVC框架的实现:(view、mode和control完全分离)
view视图的view.html代码:
<html>
<head>
<title> example </title>
</head>
<body>
<input type="button" value="baidu" id="baidu"/>
</body>
<script src="model.js"></script>
<script src="control.js"></script>
</html>
实现control控制功能的control.js代码:control.js的代码就是实现html页面节点事件的注册。使得节点的各种事件知道会触发什么函数去执行。
function G(id){
return document.getElementById(id);
}
var UI = new Object();
UI.register = function(id,even,fun,arr){
if(G(id))
G(id)["on"+even] = function(){
fun(arr);
};
}
UI.register("baidu","click",tipInfo,[1,2]);
具体的函数操作,可以放到model模块中执行,在model中,才是真正处理逻辑操作
function tipInfo(arr){
alert(arr[1]);
//实现其他组件功能,例如popup、form等。都属于model模型
}