背景:随着应用系统的逐步增大,系统的业务逻辑复杂度正在呈现几何级数式增长,在这种情况下,采取传统的开发方法,讲系统的所有处理逻辑都放在JSP页面中,那将是程序员的一种噩梦。而MVC思想的出现给程序员带来了福音。
MVC简介
MVC模式
MVC(Model、View、Control)是软件开发过程中比较流行的设计思想。在了解MVC之前,首先应明确一点,MVC是一种设计模式(设计思想),并不是一种编程技术。
MVC思想是将系统各个组件进行分类,不同组件扮演不同角色,然后将系统中的组件分隔到不同层中,组件被限制在其所在层,保证良好的封装性,MVC各层功能如下
模型(Model)层:实现系统业务逻辑
视图(View)层 :用于与用户交互
控制(Control)层:是Model和View之间沟通的桥梁
这三层将整个业务应用划分为三层架构(3-tier architecture) ,即表现层(UI)、业务逻辑层(BLL)、数据访问层(DAL)。
1. 表现层(UI)
通俗讲就是展现给用户的界面,即用户在使用一个系统时的所见所得。
2. 业务逻辑层(BLL)
针对具体问题的操作,也可以说是对数据层的操作,对数据业务逻辑的处理。
3. 数据访问层(DAL)
直接操作数据库,包括对数据的增、删、改、查等。
MVC与三层结构的区别
网上有一个很流行的例子,可以了解二者之间的区别。A在上海的浦东区逛街,有人要抢劫他,打110报警了,B在闵行区也被劫持,他也打110报警了,他们打110的时候,接电话的是上海市公安局总部指挥中心,对于A,来解救他是浦东分局的警察,对于B,解救他的是闵行分局的警察,对于AB来说,他们不需要关心到底是谁来解救他的,他们只管打110报警(类似于页面数据由action提交到控制器),由110指挥中心确定他的位置然后派出具体的地方警局去营救(控制器根据需求调用model层去完成对应的数据处理)。而三层架构在这个过程中就像A或B被劫持了,他们直接找到当地警(调用BLL层方法)的警察来处理
MVC特点
(1)低耦合性
首先,视图层和业务层的分离使得视图层代码和模型与控制器代码相分离。其次,因为模型与控制器和视图相分离,很容易改变应用程序的数据层和业务规则,从而降低层与层之间的耦合,提高了程序的可扩展性,有助于程序员灵活地进行编程
(2)可维护性高
模型、控制器与视图相分离,使得一个模型能对应多个视图,提高代码可维护性,一旦模型发生变化,方便维护。
(3)成本低,部署快
MVC使开发和维护用户和接口的技术含量降低,使用MVC模式使开发时间大大缩减,使程序员(Java开发人员)集中精力于业务逻辑,界面程序员(HML和JSP开发人员)集中精力于表现形式
(4)有利于工程化管理
MVC将不同模型和不同视图组合一起进行管理,层与层分离,各层有自己特色,各层只负责自己的任务,不用管其它层业务,代码可以复用,缩短软件开发周期
JSP Model1 和 JSP Model2
对于Java阵营的动态Web编程技术而言,经历了所谓的Model 1和Model 2时代。
JSP Model1
使用JSP Model1模式开发的Web项目都是由JSP页面构成。JSP页面既要负责显示还要负责控制,将控制逻辑和表现逻辑混在一起了。
优点:
- 开发比较简单和方便,非常适合小型Web项目的快速开发
- 对于JAva Web开发人员的技术水平要求不高
缺点:
- 重用性低,功能相似代码只能复制,不能直接调用
- 可扩展性低,如果以后想给程序扩展功能,将是非常困难的
传统的JSP Model1模型中,JSP是独立的,并自主完成所有任务,如图1-1所示
改进的JSP Model1模型中,JSP页面与JavaBean共同完成任务,如图1-2所示
JSP Model2
JSP Model2是基于MVC架构的设计模式,使用了JSP、Servelt、JavaBean三种技术
- JavaBean 充当模型(M),负责业务逻辑以及对数据库的操作
- JSP 只负责显示(V),生成动态网页
- Servelt 充当控制器(C),用来处理各种请求的分派
交互过程:
用户提交页面给JSP页面,JSP接收用户提交的值并通过JavaBean连接数据库并操作数据库,然后将结果返回给用户,JSP Model2 模型如图1-3所示
优点:
- 适合多人合作开发大型的Web项目
- 有利于组件的重用
- 有利于开发中的分工
缺点:
- Web项目的开发难度加大,同时对开发人员的技术要求也提高了