MVC设计模式

背景:随着应用系统的逐步增大,系统的业务逻辑复杂度正在呈现几何级数式增长,在这种情况下,采取传统的开发方法,讲系统的所有处理逻辑都放在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 Model1模型中,JSP页面与JavaBean共同完成任务,如图1-2所示
改进的JSP Model1 模型

JSP Model2

JSP Model2是基于MVC架构的设计模式,使用了JSP、Servelt、JavaBean三种技术

  • JavaBean 充当模型(M),负责业务逻辑以及对数据库的操作
  • JSP 只负责显示(V),生成动态网页
  • Servelt 充当控制器(C),用来处理各种请求的分派

交互过程:

用户提交页面给JSP页面,JSP接收用户提交的值并通过JavaBean连接数据库并操作数据库,然后将结果返回给用户,JSP Model2 模型如图1-3所示
JSP Model2 模型

优点:

  • 适合多人合作开发大型的Web项目
  • 有利于组件的重用
  • 有利于开发中的分工

缺点:

  • Web项目的开发难度加大,同时对开发人员的技术要求也提高了
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!