您的位置:首页 > 运维架构 > 网站架构

MVC架构

2015-12-30 11:31 495 查看

1、MVC简介



  MVC模式(Model-View-Controller)是软件工程中的一种软件架构模式,最早为Trygve Reenskaug 提出,为施乐帕罗奥多研究中心(Xerox PARC)的Smalltalk语言发明的一种软件设计模式。

  MVC结构是位那些需要为同样的数据提供多个视图的应用程序而设计的,通过把职责、性质相近的成分归结在一起,不相近的进行隔离,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),每一部分相对独立,职责单一,在系统中可以专注于自身的核心逻辑,很好的实现了数据层与表示层的分离。是对系统复杂性的一种合理的梳理与切分,它的思想实质就是“关注点分离”,即解耦和,使得各模块内部高内聚、模块之间低耦合。MVC作为一种开发模型,通常用于分布式应用系统的设计和分析中。

  ● 视图:

    视图是用户看到并与之交互的界面。对老式的Web程序来说,视图是HTML元素组成的界面;新式的Web程序中,还要包括 XHTML,XML/XSL,WML 等标识语言和 Web services 等。视图接收用户输入信息并从模型获得信息并显示。在视图中没有程序逻辑,为了实现视图的刷新功能,视图需要访问被它监视的数据模型(Model),因此应该事先在被它监视的数据那里注册。

  ● 控制器:

    控制器从视图接收请求并调用相应模型去完成用户需求,它本身不输出任何东西也不对数据做任何处理。它接收请求并决定调用哪个模型构件去处理请求,然后确定用哪个视图来显示模型处理返回的数据。控制器起到不同层间的组织作用,用于控制应用程序的流程,处理事件并作出响应。“事件”包括用户的行为和数据模型上的改变。

  ● 模型:

    编程起源于国外,国外认为编程来源于生活,编程模拟生活实际来处理数据,所以程序中每一个功能都可以称为一个模型。MVC中的模型负责对具体业务的处理并能够访问数据库,“模型”不依赖“视图”和“控制器”,也就是说,模型只关注于处理自身事务,不关心它被如何显示或被操作。但模型中数据的变化会通过刷新机制公布,为了实现这种机制,那些用于监视此模型的视图必须事先在此模型上注册,从而,视图可以了解数据在数据模型上发生的改变。

  ● 三者之间的关系:

    模型、视图与控制器的分离,使得一个模型可以具有多个显示视图。如果用户通过某个视图的控制器改变了模型的数据,所有其他依赖于这些数据的视图都反映到这些变化。因此,无论何时发生了何种数据变化,控制器都会将变化通知所有的视图,导致显示的更新。


  ● MVC的优点:

    多个视图能共享一个模型。同一个Web程序会提供多种用户界面,例如用户希望既能够通过浏览器来收发电子邮件,还希望通过手机来访问电子邮箱,这就要求Web网站同时能提供Internet界面和WAP界面。在MVC设计模式中,模型响应用户请求并返回响应数据,视图负责格式化数据并把它们呈现给用户,业务逻辑和表示层分离,同一个模型可以被不同的视图重用,大大提高了代码的可重用性。

2、JavaWeb与MVC

  在 JavaWeb 中,Servlet 善于完成操作 HTTP 状态代码和请求头,使用Cookie,跟踪会话,跨请求保存信息,压缩页面,访问数据库等任务。但是用 Servlet 生成 HTML 冗长难读,于是引入了JSP(将HTML和Java代码分离)完成表示层的任务。

  基于上述思想将表示层和业务逻辑层分离,发挥各自的长处,就是MVC。在JavaWeb中,javabean 表示模型,JSP表示视图,servlet 用于调用商业逻辑和数据处理(控制器)。

  JavaWeb的经历了JSP Model1、JSP Model1二代、JSP Model2三个时期。

  (1)JSP Model1第一代

    JSP Model1是JavaWeb早期的模型,它适合小型Web项目,开发成本低!Model1第一代时期,服务器端只有JSP页面,所有的操作都在JSP页面中,连访问数据库的API也在JSP页面中完成。也就是说,所有的东西都耦合在一起,对后期的维护和扩展极为不利。



 

  (2)JSP Model1第二代

    JSP Model1第二代有所改进,把业务逻辑的内容放到了JavaBean 中,而JSP页面负责显示以及请求调度的工作。虽然第二代比第一代好了些,但还让JSP做了过多的工作,JSP中把视图工作和请求调度(控制器)的工作耦合在一起了。



  (3)JSP Model2

    JSP Model2模式已经可以清晰的看到MVC完整的结构了。

    JSP:视图层,用来与用户打交道。负责接收用来的数据,以及显示数据给用户;

    Servlet:控制层,负责找到合适的模型对象来处理业务逻辑,转发到合适的视图;

    JavaBean:模型层,完成具体的业务工作,例如:开启、转账等。



    JSP Model2是在JSP Model1第二代的基础上进一步将JSP的任务分成了视图、控制层。适合多人合作开发大型的Web项目,各司其职,互不干涉,有利于开发中的分工,有利于组件的重用。但是,Web项目的开发难度加大,同时对开发人员的技术要求也提高了。

3、三层与MVC的区别

  MVC是一种设计模式,与三层同样是架构级别,相同地方在于他们都有一个表现层,但是他们不同的地方在于其他的两个层。 在三层架构中没有定义Controller 的概念。而MVC也没有把业务的逻辑访问看成两个层,这是采用三层架构或MVC设计程序最主要的区别。在三层中也提到了Model,但是三层架构中Model的概念与MVC中Model的概念是不一样的,“三层”中典型的Model层是以实体类构成的,而MVC里,则是由业务逻辑与访问数据组成的。

  小结:MVC将业务逻辑和表示层分开,多个视图能够共用一个模型;三层架构将业务逻辑进一步分成业务逻辑层和数据访问层;这两种架构的核心目的都是为了解除程序模块之间的耦合性,使得程序更加的能够可维护可扩展。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: