您的位置:首页 > 其它

MVC是什么?

2014-07-06 11:42 369 查看
MVC是什么?MVC是一种设计模式,将一个应用程序分为三个部分Model(模型),View(视图), Controller(控制器),在程序中各自负责处理自己的任务.SUN公司在JSP中将它发挥的淋漓尽致,尤其在structk中,它采用JSP来做View,severlet来做Controller,Bean做Model,最大程度上提高了程序的可维护性与协调开发性,在最近开发的一个项目中我就使用了这种思想,现在就拿出来给大家分享,让更多人明白它的实现机理.
   

首先来介绍一下MVC.所谓的M,英文为model,是模型的意思,这里可能译为中文就不好理解了,不过没关系,大家只要明白它是用来表示业务数据及业务规则的,再说的通俗一点,就是由它来对业务数据库进行操作,并在操作之前对数据进行验证.实际上它就是以类的方式实现以往的函数的形式,只是将它更有效的组织起来罢了,这就是逻辑业务层. 

 所谓的V,英文为view,视图的意思,简单讲就是一个WEB界面,用户通过提交请求来得到自己希望得到的页面,这个页面就是一个view,如果使用过VB或是DELPHI之类的RAD开发工具,大家就是想到,实际上V就是它们之中的那个form,就是那个使用鼠标拖拉出来的界面.  所谓的C,英文为controller,英文意思为控制器,控制什么东西呢?控制的内容其实有两种:1.用户的请求2.view的显示.根据这两个功能可以把controller分为两个部分,一.frontController:引用phpmvc中的名词来讲叫前端操作器,主要的任务就是处理用户请求,将用户以POST或是GET甚至一个普通的链接进行分析处理,然后调用model来进行处理.
二. 对view的显示. 处理完的用户请求要以合适的方式返回给用户,controller负责将model处理完的结果以view的形式返回.实际上这个过程很简单,用户提交请求===>controller分析请求,调用model====>model处理数据,与数据库交互,返回处理结果===>controller得到结果,调用合适的view来返回界面给用户.(如下图示):

当用户打开一个面面时,控制器会捕捉$_GET,如果是默认首页的话,即$_GET中没有内容①就表示让控制器执行默认设置(比如用默认首页 模型 model首页视图view,其调用过 程和后面的类似),否则控制器会得到2个参数m(表示控制器要使用的模型)和a(表示控制器要进行何种行为)控制器就发出指令②给M,M接着发出③进行数据库操作,数据库经过④将 结果数据返回M,M再通过⑤把数据交给C,然后C再通过⑥把数据传递给V,V经过一系列 操作(多为模版变量的替换操作)后,通过⑦
显示(display)给用户。完成整个MVC步骤。但在某些情况下,V不必要通过 controller ,而直接通过M就能得到数据时,就会出现了上图中的A和B步骤,比如添加用户的页面,用户填好信息,点提交按钮时,M经过一系列数据处理,把结果传递给结果页面视图(V),然后V执行⑦输出。  一般而言,网站的每个功能模块都对应着各自的M、V、C,比如,你网站有一个留言功能,那么你就应该有留言的控制器(C),留言的视图(V),留言的模型(M)。
 

下面讲一个简单的例子来说明一下它的执行教程:    场景: 一个新闻显示的页面,现在用户将选择一条他感兴趣的新闻然后点击(所有新闻都在数据库里保存,而非静态生成)....    在这个过程中发生了什么事了呢?用户点击一条感兴趣的新闻后,就是向服务器提交一个请求,请求服务器返回这个新闻页的内容,服务器接到它的请求后从数据库里调出ID为请求N的新闻,然后在一个新闻页里显示出来,就这么简单.来看看在MVC模式下它是怎么执行的:用户请求提交给controller,controller通过分析用户请求的URL,得知的用户请求是显示ID为n的,由它调用新闻类model的getOne方法,将告诉它要提取ID为n的新闻,新闻类model在接授到这个指令后调用getOne方法,
getOne接授一个参数ID,使用一个select语句从数据库里提取出ID=n的这条新闻及相关信息,然后将返回集交给controller, contrller得到返回的结果后采用模板填充的办法将相关信息填在新闻页模板上,然后将它返回给用户,这个模板,就是所谓的view.    看上去MVC是把一件简单的事情复杂化了,当然,这里与我讲的这个例子有关,例子是简单一点,所以看不出MVC有什么优势,反而给人的感觉是简单的事情复杂化了,其实不然. 为什么呢?如果整个程序由一人来开发,那么感觉确实有些复杂复杂,但有没有想过程序如果由多人来开发呢?即使采用模板技术,也仅可以分开程序员与美工,而不能实现程序与业务规则(业务逻辑)的分离,如果把业务规则也分离出来,使得一部分程序员集中处理业务规则,而另一部分人集中处理业务返回数据及页面的显示,美工只需要做模板,这样是不是可以提高工作效率呢?MVC就是这个思路,现在行的MVC被称为model2,它是由这三层所形成的,MVC
model1就是只实现view与程序的分离,就像写VB或是delphi一样(当然,这里我说的是那种一方面设计界面,另一方面将代码也界面相连的那种技术...),实际上模板技术就是MVCmodel1.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mvc